Товары в карусели opencart

2022-09-14

Все написанное в этой статье является продолжением предыдущих статей о модуле "карусель" в opencart 2.3

Модуль "Карусель" красивый, но бесполезный: выводит различные ссылки в виде картинок в ряд, с возможностью их перелистывать.
Модуль "Рекомендуемые" полезный, но не функциональный: отображает несколько товаров в виде отдельных блоков, можно его открыть или сразу добавить в корзину.
А хотелось бы, иметь возможность вывести в ряд много товаров, с возможностью открытия каждого, перелистывания и быстрого добавления в корзину. То есть нужно объединить функции обоих модулей.
Создавать отдельный модуль смысла нет, нужно только добавить функционал из одного модуля в другой. Для модификации я выбрал модуль "Карусель", чтобы можно было выводить не только товары, но и статичные картинки.

Готовый архив с файлами, к этой статье можно найти внизу страницы.

Дополнительное поле в БД

Сначала нужно добавить в модуль "Баннер" дополнительное поле, которое будет хранить идентификатор товара(product_id), для этого в БД, в таблице "oc_banner_image" добавляем поле product_id, числового типа(INT).

Дополнительное поле в баннере opencart

Модель

Дальше нужно переработать модель баннера, находится по адресу: /admin/model/design/banner.php.
В ней сначала нужно изменить запрос для работы с новым полем product_id в функциях addBanner и editBanner:

В функции getBannerImages добавить в массив $banner_image_data новый элемент: 'product_id' => $banner_image['product_id'].

Контроллер

Далее предстоит сделать изменения в контроллере: /admin/controller/design/banner.php, но сделать их красиво:
в функцию getForm() добавить $data['entry_product_id'] = $this -> language -> get('entry_product_id');
Соответственно в файлы языка добавить entry_product_id, вот так - $_['entry_product_id'] = 'Товар:';
Потом в этой же функции(getForm) подключить модель product ($this -> load -> model('catalog/product');), нужно для получения данных товара, а затем получить товар по ид - $product_info = $this -> model_catalog_product -> getProduct($banner_image['product_id']);
Из всего массива полученных данных о товаре, нам нужно два поля name и product_id ($product_name = $product_info['name']), которое надо добавить в $data 'product_name' => $product_name, а заодно и ид товара 'product_id' => $banner_image['product_id'], но добавлять нужно с условием проверки. В итоге функция getForm() будет выглядить так:

Представление

Следующий шаг - изменения формы редактирования баннера, для этого нужно внести изменения в файл /admin/view/template/design/banner_form.tpl добавить поле, с отображнием имени товара(product_name), и скрытое поле с id-товара(product_id). Эти поля я вставил перед полем ссылки($banner_image['link']).

А еще в этом файле, нужно подключить скрипт подбора товара. Ее можно взять из "рекомендуемого", но немного изменить:


Opencart добавить товары в карусель

Отображение на сайте

На этом работа с административной частью окончена. Далее нужно разобраться выводом в каталог. В первую очередь идем в контроллер catalog/controller/extension/module/carousel.php в него нужно добавить загрузку модели товара $this->load->model('catalog/product'); и обработку строк баннера (взято из контроллера featured) - по условию что "$result['product_id']>0", если равно 0, то обрабатывать как картинку.

Теперь настроим отображение карусели, для это меняем шаблон вывода catalog/view/theme/default/template/extension/module/carousel.tpl. В него также добавлен кусок кода из featured, по условию , в итоге получается, что если массив данных имеет product_id, то выводится товар, а если не имеет, то выводится картинка, как и было задумано разработчиками.

Товары в карусели на opencart

Файлы для скачивания:
Архив к этой статье;
Обновлнеи карусели;
Навигация и заголовок;