Ruslan Brest, rb.labtodo.com

Разработка ПО, сайтов и веб-сервисов. CodeIgniter, PHP, MySQL, W3C CSS/XHTML, MaxSite CMS, OpenCart, PrestaShop

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

Опубликовано: 27 августа 2011.
Автор: Ruslan Brest.

Рубрика: Howto | OpenCart.

Просмотров: 1602.
Подписаться на комментарии по RSS.

Примечание: вообще-то пока сделал сортировку не по имени, а по 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

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

  1. Николай
    27.10.2011 в 15:51:06 | #1

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

  2. Ruslan Brest
    27.10.2011 в 16:56:28 | #2

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

  3. Student
    02.03.2012 в 14:50:25 | #3

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

  4. Ruslan Brest
    02.03.2012 в 17:27:07 | #4

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

  5. Student
    06.03.2012 в 15:58:56 | #5

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

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

  6. Владимир
    05.04.2012 в 07:43:08 | #6

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

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

Гость
Комментатор / хотите им стать

Чтобы стать комментатором, введите email и пароль. Напишите комментарий. В дальнейшем ваша связка email-пароль позволит комментировать, получать уведомления об ответах и редактировать свои данные. Не забудьте про активацию (инструкция придёт на email, указанный при регистрации).

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

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