OC v3.х Как подтягивать данные в такую таблицу

  • Автор темы Автор темы alexein66
  • Дата начала Дата начала

alexein66

Мастер конкатенации
Разрушитель (V)
Сообщения
252
Реакции
128
Баллы
3 923
Всем привет.

Столкнулся впервые с задачей построить такую таблицу товаров в Opencart 3, где в одной строке берем нужный товар из категории и подтягиваем цены из двух товаров. Не могу придумать, чтобы хотя бы цены подтягивались автоматически в нужные поля.

2023-10-22_21-50-29.png

html таблица

HTML:
<table>
    <tbody>
        <tr>
            <td><strong>Класс</strong></td>
            <td><strong>Цветной<a href="#">
                <img src="" alt="" ></a>/прозрачный
                <a href="#/">
                    <img src="#" alt="" ></a></strong></td>
            <td><strong> Структура</strong></td>
            <td>
                <p><strong> Цена за лист,размеры<br>2,1 х 6м <br> р. (12,6 м2) <br> руб.</strong></p>
            </td>
            <td>
                <p><strong> Цена за лист,размеры<br>2,1 х 12м <br> р. (25,25 м2) <br> руб.</strong></p>
            </td>
        </tr>
        <tr>
            <td>
                <p><a href="#"><strong> 3,5мм</strong></a></p>
                <p> (0,45 кг/м²)</p>
            </td>
            <td><strong><img src="#" alt="" ></strong></td>
            <td>
                <a title="" href="#">
                    <img src="#" alt="">
                </a>
            </td>
            <td>
                <p><em>1 785</em><em>1 700</em><em>руб.</em></p>
            </td>
            <td>
                <p><em>3 570</em><em>3 400</em><em>руб.</em></p>
            </td>
        </tr>
    </tbody>

Может модулем каким можно порешать. В идеале бы запросами из БД выдергивать нужные данные, но не могу сообразить как
 
Посмотрите в Сравнениях
 
Посмотрите в Сравнениях
2023-10-24_12-57-48.png

Модифицировал модуль рекомендуемые. Вывожу товар в табличку, сделал ссылку на подкатегорию (тут все ок), цена подтягивается, но нужно, чтобы подтягивалась цена из товара со значением атрибута 2,1х12м из нужной подкатегории. В контроллере указал нужные подкатегории в которых искать товар

PHP:
 $product_categories = $this->model_catalog_product->getCategories($product_info['product_id']);
                    $categoryLink = '';

                    // Перебираем категории продукта
                    foreach ($product_categories as $category) {
                        if (in_array($category['category_id'], [70, 71, 104, 105, 116, 115, 101, 102, 103])) {
                            $categoryLink = $this->url->link('product/category', 'path=' . $category['category_id']);
                            break;
                        }
                    }

                    $data['products'][] = array(
                        'product_id'  => $product_info['product_id'],
                        'thumb'       => $image,
                        'name'        => $product_info['name'],
                        'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                        'price'       => $price,
                        'special'     => $special,
                        'tax'         => $tax,
                        'rating'      => $rating,
                        'href'        => $this->url->link('product/product', 'product_id=' . $product_info['product_id']),
                        'category_link' => $categoryLink,
                        'attribute_groups' => $this->model_catalog_product->getProductAttributes($product_info['product_id'])
                    );

В шаблоне

PHP:
    {% for product in products %}
            <tr class="">

                {% if product.attribute_groups %}
                    {% set targetCategoryIds = [70, 71, 104, 105, 116, 115, 101, 102, 103] %}
                    {% set attributeData = [] %}

                    {# Перебираем атрибуты товара и создаем новый массив с атрибутами #}
                    {# Если есть categoryLink, выводим атрибут как ссылку, иначе как текст #}
                    {% for attribute_group in product.attribute_groups %}
                        {% for attribute in attribute_group.attribute %}
                            {% if attribute.attribute_id == 26 %}
                                {% if product.category_link %}
                                    <td><a href="{{ product.category_link }}">{{ attribute.text }}</a><br></td>
                                {% else %}
                                    <td>{{ attribute.text }}<br></td>
                                {% endif %}
                            {% endif %}
                        {% endfor %}
                    {% endfor %}
                {% endif %}
                <td>{#<a class="product-thumb__name" href="{{ product.href }}">{{ product.name }}</a>#}</td>
                <td>1</td>
                <td>
                    {% if product.price %}
                        <div class="product-thumb__price price" data-price="{{ product.price_value }}" data-special="{{ product.special_value }}" data-discount="{{ product.discounts }}">
                            {% if not product.special %}
                                {{ product.price }}
                            {% else %}
                                <span class="price-old">{{ product.price }}</span> <span class="price-new">{{ product.special }}</span>
                            {% endif %}
                        </div>
                    {% endif %}
                </td>
                {% if product.price %}
                    <td class="product-thumb__price price" data-price="{{ product.price_value }}" data-special="{{ product.special_value }}" data-discount="{{ product.discounts }}">
                        {% if not product.special %}
                            {{ product.price }}
                        {% else %}
                            <span class="price-old">{{ product.price }}</span> <span class="price-new">{{ product.special }}</span>
                        {% endif %}
                    </td>
                    {% if product.tax %}<div class="price-tax">{{ text_tax }} {{ product.tax }}</div>{% endif %}
                {% endif %}


            </tr>
        {% endfor %}

Вот втором случае вывода цены необходимо подтянуть цену и специальную цену товара из нужной подкатегории

PHP:
 {% if product.price %}

                    <td class="product-thumb__price price" data-price="{{ product.price_value }}" data-special="{{ product.special_value }}" data-discount="{{ product.discounts }}">

                        {% if not product.special %}

                            {{ product.price }}

                        {% else %}

                            <span class="price-old">{{ product.price }}</span> <span class="price-new">{{ product.special }}</span>

                        {% endif %}

                    </td>

                    {% if product.tax %}<div class="price-tax">{{ text_tax }} {{ product.tax }}</div>{% endif %}

                {% endif %}

И у меня здесь затуп как это сделать. Пробовал делать запрос к БД, но в массив почему-то ничего не выводит. Есть вариант помочь за денежку?
 
из нужной подкатегории
Копаем в сторону модели, нужно будет писать отдельную функцию в модели
но нужно, чтобы подтягивалась цена из товара со значением атрибута 2,1х12м
Далее фильтровать, насколько помню по id атрибута

То есть, при обращении контроллера к модели, будут параметры: категория и id атрибута. Можно ещё и сортировку прикрутить

В контроллере:
PHP:
$products = $this->model_catalog_product->getProductsByCategoryIdAndAttribute($category_id, $attribute_id);

В модели model/catalog/product.php создаём функцию (сгенерировал для примера нейросетью, на работоспособность не проверял):
PHP:
public function getProductsByCategoryIdAndAttribute($category_id, $attribute_id) {
    $query = $this->db->query("SELECT p.product_id, pd.name FROM " . DB_PREFIX . "product p
                              LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)
                              LEFT JOIN " . DB_PREFIX . "product_attribute pa ON (p.product_id = pa.product_id)
                              WHERE p.product_id IN (SELECT product_id FROM " . DB_PREFIX . "product_to_category WHERE category_id = '" . (int)$category_id . "')
                              AND pa.attribute_id = '" . (int)$attribute_id . "'
                              AND p.status = '1'
                              AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'
                              GROUP BY p.product_id");
                              
    return $query->rows;
}
 
$products = $this->model_catalog_product->getProductsByCategoryIdAndAttribute($category_id, $attribute_id);
Интересно. А можно как-то упростить этот момент. Суть какая. Я еще внимательней ознакомился с таблицей.
Получается фильтр и вывод цен товаров идет не только по атрибутам а еще по названию товара. Смотрим в таблицу

Screenshot_4.png

Есть параметр (0,45 кг/м²) , (0,5 кг/м²) а в товаре это все в названии. А также есть еще параметры - Цвет и Структура которых нет в товаре.

2023-10-24_13-47-07.png

То есть делать еще проверку по названию, потом по атрибуту и т.д. Мне кажется это адски сложно.

Вот если вариант сделать html таблицу и подтягивать в нужные поля цены из товаров, вот это было бы, мне думается, намного проще, но как такое сделать ума не приложу.
 
И еще есть в таблице и в товаре такой код
Screenshot_5.png
И при переходе по ссылке из таблицы в подкатегорию она такого вида

Код:
?current_cat=on&f[3]=0&f[4]=0&f[5]=0&f[7]=0&f[9]=142&minprice=&maxprice=&ef_ajax=1

То есть это js все я так понимаю
 
Фильтр, это когда вам нужно выбрать товары по какому то признаку(ам). Допустим из всех товаров нужно выбрать товары с ценой 200.
В данном случае вам нужна сортировка, то есть у вас есть массив товаров, и вам нужно их отсортировать по какому то признаку:
Цена от большего к меньшему
Цена от меньшего к большему
Сортировка по названия (А - Я)
Сортировка по названия (Я - А)
И тп
И еще есть в таблице и в товаре такой код
Посмотреть вложение 7206
И при переходе по ссылке из таблицы в подкатегорию она такого вида

Код:
?current_cat=on&f[3]=0&f[4]=0&f[5]=0&f[7]=0&f[9]=142&minprice=&maxprice=&ef_ajax=1

То есть это js все я так понимаю
Не видя больного, диагноз не поставить
Вы показываете только часть кода, а в данном случае, вы просите по фотографии локтя определить, сколько лет человеку и где он живёт:wink:
 
Назад
Верх