Opencart 1.5.x: (catalog) Как добавить сортировку по производителю в каталоге товаров
Примечание: вообще-то пока сделал сортировку не по имени, а по 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)) {
Еще записи по теме
- Opencart 1.5.1.3: добавляем главную страницу в sitemap.xml
- Как модифицируются способы оплаты для использования с QCPM.1513
- Opencart 1.5.x (catalog): как вывести третий уровень категорий в главном меню
- Opencart 1.5.x (catalog): как сделать, чтобы модуль категорий показывал все подкатегории
- Opencart 1.5.1: вывод информации о наличии под картинкой в каталоге товаров
- Opencart 1.5.1.3 и ниже (admin): колонка SKU (поиск, фильтр, автодополнение, сортировка)
- Добавлена поддержка Shoppica-и в Quickcheckout со способами оплаты (QCPM.1513)




Комментариев: 6
Здравствуйте! Скажите, пожалуйста, как удалить "счетчик" количества товаров в категориях и подменю? Спасибо!
В контроллерах соответствующих в паре мест поправить. Эти надписи там генерируются. Отключить подсчёт и убрать из строчки дописывание этой цифры в скобках.
Здравствуйте! Скажите, пожалуйста, как сделать сортировку по SKU?
Точно так же. Всё полностью идентично, только вместо manufacturer_id используйте sku (p.sku и т.п.)
спасибо, сделал сортировку по артикулу
только с вашим SQL-запросом у меня она не заработала, со стандартным все ок.
Здравствуйте! Подскажите как сделать сортировку по имени производителя?