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

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

Для реализации задуманного нам надо будет изменить три файла и соответственно разделим все на три этапа.

1. Для начала добавим функцию выборки всех категорий в которых находится данный товар. Для этого открываем файл: /catalog/model/catalog/product.php

Находим строку:

public function getProductRelated($product_id) { 

Перед ней вставляем:

public function getProductCategory($product_id) { $product_data = array(); $query = $this->db->query('SELECT * FROM ' . DB_PREFIX . 'product_to_category p2c LEFT JOIN ' . DB_PREFIX . 'product p ON (p2c.product_id = p.product_id) LEFT JOIN ' . DB_PREFIX . 'product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p2c.product_id = '' . (int)$product_id . '' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '' . (int)$this->config->get('config_store_id') . '''); foreach ($query->rows as $result) { $product_data[$result['category_id']] = $this->model_catalog_category->getCategory($result['category_id']); } return $product_data; } 

Сохраняем, теперь у нас есть массив с id категорий товара.

2. Далее добавим необходимый функционал в контроллер, для этого открываем: /catalog/controller/product/product.php Находим строки:

$this->data['products'] = array();

После неё вставляем:

$this->data['categories'] = array(); $category_names = array(); 

Далее находим строку

$this->data['products'][] = array(

Перед ней вставляем:

$category_data = $this->model_catalog_product->getProductCategory($result['product_id']); foreach($category_data as $id){ $category_name = $id['name']; $category_category_id = $id['category_id']; $category_sort_order = $id['sort_order']; } 

Далее находим строку:

'name' => $result['name'], 

После нее вставляем:

'category_name' => $category_name, 'category_id' => $category_category_id, 'category_sort' => $category_sort_order, 

Далее находим строку:

'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) 

После нее вставляем:

if(!in_array($category_name, $category_names)){ $category_names[] = $category_name; } $this->data['products_cat'] = $category_names; 

Далее находим строку:

$this->data['tags'] = array(); 

Перед ней вставляем:

foreach ($this->data['products_cat'] as $name) { $products = array(); foreach ($this->data['products'] as $result) { if($name == $result['category_name']){ $products[] = array( 'product_id' => $result['product_id'], 'thumb' => $result['thumb'], 'name' => $result['name'], 'price' => $result['price'], 'special' => $result['special'], 'rating' => $result['rating'], 'reviews' => $result['reviews'], 'href' => $result['href'] ); } } $this->data['categories'][] = array( 'name' => $name, 'products' => $products ); } 

Сохраняем, теперь у нас есть массив с категориями у которого есть массив с товарами этих категорий. Осталось дело за малым, отредактировать вывод рекомендованных товаров.

3. Для этого открываем файл шаблона: /catalog/view/theme/default/template/product/product.tpl Находим строку:

Заменяем её на:

 

Далее находим строку:

Заменяем её на строки:

 

Далее находим строку:

');'?>

После неё добавляем:

Все готово! После внесения изменений все рекомендованные товары сортируются по категориям. Ниже можно скачать модуль в vqmod xml формате


02.11.2015 4964
Новости из этой категории
11.09.2019 4943
В Opencart при копировании товара удаляет
Во втором Opencart замечен странный баг который вместо копирования товара в списке его удаляет. Что бы исправить необходимо открыть файлadmin/view/template/catalog/produc..
15.11.2018 17282
Как вывести любую информацию в любом месте в карточке товара
Приветствую тебя юный разработчик! Очень часто в заданиях или целых проектах у меня бывают похожие пункты. Очень популярный это вывод информационного блока в карточке тов..
29.09.2018 8078
Исправляем баг Opencart редирект с page=1 на страницу категории
В пагинации Opencart зарыто очень много багов. Например при перелистывании категории кнопками 1.2.3... у нас создаются дубли страниц, которые можно решить с помощью внедр..
11.02.2018 7879
Как задать разный порядок сортировки товара для каждой из категорий к которому он привязан
Приветствую! Недавно мне написал заказчик который попросил меня сделать достаточно интересную доработку. Суть ее в том что надо сделать порядок сортировки товара который ..
23.01.2018 9784
Пропадают заказы в Opencart - как вылечить?
Очень часто ко мне обращаются мои клиенты с просьбой разобраться почему у них пропадают заказы. То есть клиенты звонят и говорят что заказ сделали но никто не перезванива..
Вся информация, представленная на сайте, является демонстрационной и оставляя информацию о своих персональных данных, вы добровольно делаете их общедоступными.
Рекомендуем использовать обезличенные данные. Мы используем файлы cookie для вашего удобства пользования сайтом и повышения качества рекомендаций. Подробнее