Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Вывод уникальных опций/других переменных товара в модулях/категории


Blackseabreathe

Recommended Posts

Opencart 3x

 

Привет. Это будет работать не только для опций товара, но и для других переменных товара. Я показываю на примере вывода уникальных опций товара в модуле "Хиты продаж". Можно переделать, переименовывая нужные переменные (ну например атрибуты товара) и обращаясь к нужным функциям. Не только в хитах, также в любых других модулях или даже в категории/карточке товара/.....

 

Парился весь вечер, решение оказалось проще некуда.

Мне нужно было вывести только уникальные опции товара. Тут вы спросите - "- а как опции могут быть повторяющимися? Сам же в админке выбираешь опции, ну не делай дубли там и будет тебе счастье. "

 

Вот как опции могут быть повторяющимися и, в то же время уникальными - есть плагин (или сам напишешь) из категории "связанные опции товара". Давать название не буду, не реклама. Кому надо спросит в личку. Так вот теперь представьте что у вас есть 1 товар - пальто.

 

Это пальто, в количестве на складе 10 штук в своих цветах и размерах.

Из них в админке мы делаем зависимые опции: 56 размер черный, 56 размер белый, 54 размер белый, 54 размер красный.... и так далее

Если мы будем выводить все имеющиеся опции товара (например, размер), то получим результат такой: 56, 56, 54, 54

Ну вот вам и повторяющиеся опции товара. Что делаем теперь? Нам нужно избавиться от дублей на фронте - согласитесь что юзер/заказчик, посмотрев на вывод размеров в выводе каждого товара, скажет - "- а почему на сайте размеры выводятся с повторением?"

 

Поэтому делаем так: эти куски кода взяты из оригинального контроллера catalog/controller/product/product.php

идем в catalog/controller/extension/module/bestseller.php

Спойлер

находим цикл товаров foreach ($results as $result) {
и ниже этой строки вставляем
$options = $this->model_catalog_product->getProductOptionsUnique($result['product_id']);
Заметил что функции getProductOptionsUnique не существует в opencart? Аха.
потом ниже этой добавленной строки пишем
// options
foreach ($options as $option) {
$product_option_value_data = array();
foreach ($option['product_option_value'] as $option_value) {
if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) {
$product_option_value_data[] = array(
'product_option_value_id' => $option_value['product_option_value_id'],
'option_value_id'         => $option_value['option_value_id'],
'name'                    => $option_value['name']
);
}
}
$data['options'][] = array(
'product_option_id'    => $option['product_option_id'],
'product_option_value' => $product_option_value_data,
'option_id'            => $option['option_id'],
'name'                 => $option['name']
);
}
//end options
тут же ищем $data['products'][] = array(
и в любом месте, я поставил перед 'name' => .....
поставим 'options'       => $options,

 

 

Закончили тут.

 

Идем в catalog/model/catalog/product.php

Спойлер

находим ф-ию getProductOptions и копируем ее вставив ниже этой ф-ии толко дадим ей название getProductOptionsUnique

теперь в этой новой функции изменим в самом низу запроса к sql
ORDER BY ov.sort_order
на
GROUP BY ov.sort_order

 

 

в twig вывод такой же как и в карточке например.

 

Спойлер

{% if product.options %} <!--если есть опции-->
{% for option in product.options %} <!--цикл-->
{% if option.option_id == '13' %} <!--если id опции такой-то... это не обязательно, это мне нужно было вывести конкретные опции (размер) - узнать id категории опций можно в админке - зайти в опции, нажать на карандаш напротив нужной опции и в адресной строке в самом конце найти что-то типа &id="номер категории опций"-->
{% for pov in option.product_option_value %} <!--разбираем-->
<div class="size">{{ pov.name }}</div> <!--выводим нужное значение-->
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}

 

 

Готово.

 

Если есть способ не изменять model/product.php, и сделать это в catalog/controller/product/product.php что-то вроде array_unique($array); то пишите, буду признателен,

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.