Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 1.5.x: (catalog) Как добавить сортировку по производителю в каталоге товаров

Просмотров: 9524 RSS 10
Howto » OpenCart

Примечание: вообще-то пока сделал сортировку не по имени, а по ID производителей: нам этого сейчас хватает. Чтобы сделать именно по названию, нужно небольшое дополнение. Возможно, добавлю его позже.

Изменяемые файлы:

catalog/controller/product/category.php
catalog/language/russian/product/category.php
catalog/model/catalog/product.php

Изменения (diff):

diff --git a/public_html/catalog/controller/product/category.php b/public_html/catalog/controller/product/category.php
index 9ef6331..54ad9bc 100644
--- a/public_html/catalog/controller/product/category.php
+++ b/public_html/catalog/controller/product/category.php
@@ -260,6 +260,19 @@ class ControllerProductCategory extends Controller {
 				'value' => 'p.model-DESC',
 				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $url)
 			);
+
+			$this->data['sorts'][] = array(
+				'text'  => $this->language->get('text_manufacturer_asc'),
+				'value' => 'p.manufacturer_id-ASC',
+				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.manufacturer_id&order=ASC' . $url)
+			);
+
+			$this->data['sorts'][] = array(
+				'text'  => $this->language->get('text_manufacturer_desc'),
+				'value' => 'p.manufacturer_id-DESC',
+				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.manufacturer_id&order=DESC' . $url)
+			);
+
 			
 			$url = '';
 	
diff --git a/public_html/catalog/language/russian/product/category.php b/public_html/catalog/language/russian/product/category.php
index 4e28d8c..762c91e 100644
--- a/public_html/catalog/language/russian/product/category.php
+++ b/public_html/catalog/language/russian/product/category.php
@@ -1,5 +1,5 @@
-<?php
-// Text
+<?php
+// Text
 $_['text_refine']       = 'Уточнение поиска';
 $_['text_product']      = 'Товары';
 $_['text_error']        = 'Категория не найдена!';
@@ -25,5 +25,7 @@ $_['text_rating_asc']   = 'Рейтинг (начиная с низкого)';
 $_['text_rating_desc']  = 'Рейтинг (начиная с высокого)';
 $_['text_model_asc']    = 'Модель (А- Я)';
 $_['text_model_desc']   = 'Модель (Я - А)';
+$_['text_manufacturer_asc']    = 'Производитель (А- Я)';
+$_['text_manufacturer_desc']   = 'Производитель (Я - А)';
 $_['text_limit']        = 'Показать:';
 ?>
\ No newline at end of file
diff --git a/public_html/catalog/model/catalog/product.php b/public_html/catalog/model/catalog/product.php
index c963f3e..8d90fc6 100644
--- a/public_html/catalog/model/catalog/product.php
+++ b/public_html/catalog/model/catalog/product.php
@@ -68,7 +68,7 @@ class ModelCatalogProduct extends Model {
 		$product_data = $this->cache->get('product.' . $cache . '.' . $customer_group_id);
 		
 		if (!$product_data) {
-			$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; 
+			$sql = "SELECT p.product_id, p.manufacturer_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; 
 			
 			if (isset($data['filter_name']) && $data['filter_name']) {
 				if (isset($data['filter_description']) && $data['filter_description']) {
@@ -113,7 +113,8 @@ class ModelCatalogProduct extends Model {
 				'p.price',
 				'rating',
 				'p.sort_order',
-				'p.date_added'
+				'p.date_added',
+				'p.manufacturer_id'
 			);	
 			
 			if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Комментариев: 10
  1. 2011-10-28 в 00:51:06 | Николай

    Здравствуйте! Скажите, пожалуйста, как удалить "счетчик" количества товаров в категориях и подменю? Спасибо!

  2. 2011-10-28 в 01:56:28 | Ruslan Brest

    В контроллерах соответствующих в паре мест поправить. Эти надписи там генерируются. Отключить подсчёт и убрать из строчки дописывание этой цифры в скобках.

  3. Здравствуйте! Скажите, пожалуйста, как сделать сортировку по SKU?

  4. 2012-03-03 в 02:27:07 | Ruslan Brest

    Точно так же. Всё полностью идентично, только вместо manufacturer_id используйте sku (p.sku и т.п.)

  5. спасибо, сделал сортировку по артикулу

    только с вашим SQL-запросом у меня она не заработала, со стандартным все ок.

  6. 2012-04-05 в 16:43:08 | Владимир

    Здравствуйте! Подскажите как сделать сортировку по имени производителя?

  7. Подскажите пожалуйста как сделать чтобы здесь не считалось???

    1 2 > >| Показано с 1 по 200 из 287 (всего 2 страниц)

    это внизу

    раньше когда не считалось магазин не тормозил когда ходишь по категориям, сейчас начало считаться что то сделал и тормозит всё остальное уже отключенно.

  8. 2012-07-28 в 15:17:37 | Ruslan Brest

    Здесь должно считаться, иначе разбивка по страницам поломается.

  9. У меня почему-то после этих изменений появилась вот эта ошибка

    Parse error: syntax error, unexpected '=' in /.../vqmod/vqcache/vq2-catalog_model_catalog_product.php on line 44

    может кто-нибудь помочь. После возврата в исходное состояние ничего не поменялось

  10. Разобрался. Отредактировал vq2-catalog_model_catalog_product.php и все встало на место.

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)