Практический каждый более или менее наполненный товарами интернет-магазин использует некоторые критерии сортировки товаров на сайте. В одном интернет магазине это может быть показ по дате добавления, в другом же это сортировка по популярности того или иного продукта.
Сортировка товаров в интернет магазине позволяет выставлять элементы в нужном порядке. Это позволяет существенно оптимизировать реализацию товаров на витрине и конечно же вопрос релевантности никто ещё не отменял. Понятие релевантности в сети интернет сегодня уже используется довольно широко, начиная от поисковых систем, заканчивая сайтом с новостной лентой. И это хорошо работает, когда популярные записи всегда стремятся в топ, а менее просматриваемые уходят в низ по списку. Однако в одних случаях это работает в автоматическом режиме, в других выставляется вручную. В обеих случаях есть свои преимущества и недостатки. В данной заметке мы поговорим про сортировку товаров в OpenCart.
В движке OpenCart как и во многих других движках существует поле, обозначаемое как «Порядок сортировки» товара. При редактировании карточки товара, мы можем видеть такое поле (у меня версия OpenCart 2.3 на анг. языке):
Как уже ясно из самого названия, оно используется для выставления значения позиции в каталоге для конкретного товара. Таким образом, в каталоге товары могут быть выстроены в нужном порядке вручную. При сортировке товаров по этому полю, выборка элементов происходит посредством указанной в запросе ORDER BY sort_order. Запрос в базу как правило производится из самого модуля. Сортировку товаров в OpenCart по умолчанию мы можем выставлять различным образом, и далее речь пойдёт об этом.
Существуют множество полей, по которым мы может выполнять сортировку товаров в каталоге. Некоторые системы позволяют настраивать подобные вещи непосредственно в администраторской части сайта. В OpenCart это делается программно, т.к. всё же нет постоянной необходимости менять поле, по которому будут сортироваться товары в каталоге.
Как уже говорилось выше, запрос в базу данных выполняется из самого модуля. Однако порядок выборки товаров мы может задавать через контроллер. По этой причине нет необходимости лезть в код модуля, куда целесообразнее это сделать через контроллер.
Контроллер, который участвует в выводе товаров категории в OpenCart располагается по такому пути:
/catalog/controller/product/category.php
Открыв данный файл, следует найти запись такого вида:
if (isset($this->request->get['sort'])) { $sort = $this->request->get['sort']; } else { $sort = 'p.sort_order'; }
В общем запись которая находится в условии else обозначает значение по умолчанию. Таким образом, переменная $sort определяет имя поля по умолчанию, которое будет использовано для сортировки товаров. Поменяв имя поля на другое, мы можем изменить поле, по которому будет сортироваться товары в категории. Существуют некоторое множество полей, по которому мы можем сортировать товары в каталоге. Далее поговорим об этих полях.
Есть несколько ключевых полей в базе данных, по которым целесообразно выполнять сортировку товаров:
‘pd.name’, — Наименование товара;
‘p.model’, — Поле, обозначающеии модель товара;
‘p.quantity‘, — Поле, обозначающее остаток товара на сайте;
‘p.price’, — Поле с ценой товара;
‘rating’, — Поле с рейтингом товара;
‘p.sort_order’, — Отдельное поле для ручной сортировки;
‘p.date_added’ — Поле с датой добавления товара;
Для примера, если мы хотим поменять сортировку товаров в каталоге по дате добавления, нам следует в переменной $sort выставить значение p.date_added. Кроме того, существуют так же возможность указания направления сортировки (ASC или DESC). Для этого используется переменная $order, которая может содержать два значения:
ASC – сортировка по возрастанию;
DESC – порядок сортировки по убыванию.
В большинстве случаем, изменения этих двух параметров бывает достаточно. После внесения изменений в скрипт не забывает почистить кэш, перед тем как проверить работу скрипта.
спасибо за статью!
а что и где прописать,что б в категории 2го уровня,категории 3го уровня,шли в столбик,каждая категория с новой строки?
Класс, спасибо! Помогли с информацией.
А возможно ли сделать сортировку по цене и наличию?
Есть товары в наличии хх шт, а есть товары со сроком поставки (например: Ожидание 2-3 дня), 0 шт в наличии, есть товары НЕТ В наличии и остаток 0шт.
Как можно сделать сортировку, чтобы сначала показывались товары В НАЛИЧИИ, потом со сроком поставки (количество 0 шт) но имеющие цену, а потом товары НЕТ В НАЛИЧИИ, не имеющие цены и наличия.
MySQL умеет сортировать по нескольким полям. Поля у тебя считай есть, это p.quantity и p.price, получается нужно правильно построить запрос к базе.