категория: , Дорабатываем
✎ Опубликовано: 02.11.2015 ☕ Просмотров: 4551 ✉ Комментарии: 6
Доработка сортировка рекомендованных товаров по категориям
В 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 Находим строку:
<?php if ($products) { ?>
Заменяем её на:
<?php if ($categories) { ?>
Далее находим строку:
<?php foreach ($products as $product) { ?>
Заменяем её на строки:
<?php foreach ($categories as $category) { ?> <h2><?php echo $category['name']; ?></h2> <?php foreach ($category['products'] as $product) { ?>
Далее находим строку:
<a class="button" onclick="addToCart('<?php echo $product['product_id']; ?>');"?><?php echo $button_cart; ?>
После неё добавляем:
<?php } ?>
Все готово! После внесения изменений все рекомендованные товары сортируются по категориям. Ниже можно скачать модуль в vqmod xml формате
С коробки сортировка на странице акции по цене работает не правильно. Исправляем баг Opencart
Сортировка рекомендуемых товаров перетягиванием мышки
Сортировка товаров в корзине по порядку добавления
В стандарте опенкарт сортирует по умолчанию как p.sort_order а нам же надо для каждой категории своя. Инструкция как сделать.
Читая информацию о рекламе в facebook я нашел кое что интересное
Чистый и валидный HTML и CSS код, Хорошие показатели Google Page Speed, Более 20 модулей в комплекте, Профессиональная техническая поддержка - это только часть того что есть в шаблоне
Исправляем странный баг в Opencart в удаляется товар при копировании. Этот баг присутствует в google chrome
Также в статье хочу выразить благодарность не только Виталию а и другим крутым авторам дополнений с кем приходилось иметь дело
Чтобы принимать Биткоин и Лайткоин в OpenCart, вам не нужно заполнять утомительные документы, проходить проверку и ждать несколько дней. Установите бесплатный модуль и просто введите адрес своего Биткоин и/или Лайткоин кошелька. Тогда все входящие платежи
Монобанк - прогрессивный банк без отделений в котором дают кредитные карточки с хорошим грейс периодом а также возможностью заработать открыв в нем депозит. Именно о нем и пойдет речь
Мы знаем что поисковые роботы любят текст на страницах. Однако публикуя тексты помните предназначена ли эта страница для такого текста
Небольшой пример как можно сделать автоматически содержание описания со скролом при клике на заголовок
Обзор платежного шлюза fondy который позволяет сделать онлайн оплату на сайте за любые товары или услуги
Как оптимизировать сайт для google page speed - обзор основного функционала сервиса от гугл для проверки скорости загрузки страницы
Для того что бы вывести кастомную информацию не надо много кода. Достаточно применить правильный подход и пару строк кода. Читаем в статье.
Как мне "посчастливилось" пощупать UMI CMS особенно со стороны переноса данных и почему меня до сих пор тошнит при слове UMI
В этом обзоре будут выявлены все плюсы и минусы каждого фильтра. Всего в обзоре будет 7 фильтров который продаются и развиваются. По завершению будет дана рекомендация какой же выбрать
Коллеги, давайте предоставлять хороший сервис и поднимать планку качества. Небольшая история как я обращался к разным разработчикам