Сортировка рекомендуемых товаров по категориям

категория: , Дорабатываем


Опубликовано: 02.11.2015 Просмотров: 2236 Комментарии: 5


Сортировка рекомендуемых товаров по категориям

Доработка сортировка рекомендованных товаров по категориям


В 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 формате


Комментарии:


Фото комментатора

Василий 02.02.2016

А как тот же трюк сделать в категории,для разбиения товара по подкатегориям в главной категории.
Администратор

Ответ for-opencart.com 02.02.2016

Там другой код нужен. В категориях делаем выборку товаров и выводим в шаблон вот и все

Фото комментатора

Игорь 24.02.2016

Спасибо за статью.То же интересует вывод данного способа в категории.
Администратор

Ответ for-opencart.com 24.02.2016

Не совсем понял схематически можете показать?

Категория в ней товары, а надо:

  • Подкатегория:
  • - товар 1
  • - товар 2
  • - товар 3
  • Подкатегория 2:
  • - товар 1
  • - товар 2
  • - товар 3

... так?

Фото комментатора

Алексей 03.05.2016

При добавлении vq-файла, пишет что переменные name, sort и ещё что-то неизвестны. При работе по инструкции вообще не грузит страницу... opencart 1.5.4 Шаблон нестандартный (пробовал менять в vq-файле - бесполезно)
Администратор

Ответ for-opencart.com 03.05.2016

Смотря какой шаблон будет - из этого уже надо отталкиваться.

Фото комментатора

Юрий 17.05.2017

Спасибо за статью! Подскажите пожалуйста, как переделать данный код под OC 2.3 ? "$this->data" меняем на "$data". А ещё?
Администратор

Ответ for-opencart.com 17.05.2017

Под 2.3 более сильные изменения - смотрите по аналогии как сделано в коде в opencart 2.3

Фото комментатора

Станислав 17.05.2017

А для поиска можно такое сделать ? к примеру ищут товар и показывает в какой категории- подкатегории находиться товар
Администратор

Ответ for-opencart.com 17.05.2017

Можно, просто надо код по аналогии перенести в поиск там суть одна и та же. Есть список товаров а мы его видоизменяем.

Быстрый поиск

Похожее

Новое на сайте