О web-разработке
и даже немного больше...

Сортировка товаров в OpenCart

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

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

Поле «Порядок сортировки» в OpenCart

В движке OpenCart как и во многих других движках существует поле, обозначаемое как «Порядок сортировки» товара. При редактировании карточки товара, мы можем видеть такое поле (у меня версия OpenCart 2.3 на анг. языке):

Как уже ясно из самого названия, оно используется для выставления значения позиции в каталоге для конкретного товара. Таким образом, в каталоге товары могут быть выстроены в нужном порядке вручную. При сортировке товаров по этому полю, выборка элементов происходит посредством указанной в запросе ORDER BY sort_order. Запрос в базу как правило производится из самого модуля. Сортировку товаров в OpenCart по умолчанию мы можем выставлять различным образом, и далее речь пойдёт об этом.

Как поменять сортировку товаров в 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 определяет имя поля по умолчанию, которое будет использовано для сортировки товаров. Поменяв имя поля на другое, мы можем изменить поле, по которому будет сортироваться товары в категории. Существуют некоторое множество полей, по которому мы можем сортировать товары в каталоге. Далее поговорим об этих полях.

Поля доступные для сортировки в OpenCart

Есть несколько ключевых полей в базе данных, по которым целесообразно выполнять сортировку товаров:

‘pd.name’, — Наименование товара;
‘p.model’, — Поле, обозначающеии модель товара;
‘p.quantity‘, — Поле, обозначающее остаток товара на сайте;
‘p.price’, — Поле с ценой товара;
‘rating’, — Поле с рейтингом товара;
‘p.sort_order’, — Отдельное поле для ручной сортировки;
‘p.date_added’ — Поле с датой добавления товара;

Для примера, если мы хотим поменять сортировку товаров в каталоге по дате добавления, нам следует в переменной $sort выставить значение p.date_added. Кроме того, существуют так же возможность указания направления сортировки (ASC или DESC). Для этого используется переменная $order, которая может содержать два значения:
ASC – сортировка по возрастанию;
DESC – порядок сортировки по убыванию.

В большинстве случаем, изменения этих двух параметров бывает достаточно. После внесения изменений в скрипт не забывает почистить кэш, перед тем как проверить работу скрипта.

Опубликован: 02.10.2019 г.

См. также:

Обращение к модели в контроллере OpenCart
Платёжные системы в OpenCart
Переключение OpenCart с HTTP на HTTPS
Сброс пароля администратора в OpenCart
Как в OpenCart очистить кэш?
Как установить модуль в OpenCart 2.x?
Как поменять статус заказа в OpenCart?
Отправка писем в OpenCart

Комментарии

  1. Андрей пишет:

    спасибо за статью!
    а что и где прописать,что б в категории 2го уровня,категории 3го уровня,шли в столбик,каждая категория с новой строки?

  2. Иван пишет:

    Класс, спасибо! Помогли с информацией.

  3. Александр пишет:

    А возможно ли сделать сортировку по цене и наличию?
    Есть товары в наличии хх шт, а есть товары со сроком поставки (например: Ожидание 2-3 дня), 0 шт в наличии, есть товары НЕТ В наличии и остаток 0шт.
    Как можно сделать сортировку, чтобы сначала показывались товары В НАЛИЧИИ, потом со сроком поставки (количество 0 шт) но имеющие цену, а потом товары НЕТ В НАЛИЧИИ, не имеющие цены и наличия.

    1. htmaker пишет:

      MySQL умеет сортировать по нескольким полям. Поля у тебя считай есть, это p.quantity и p.price, получается нужно правильно построить запрос к базе.

Добавить комментарий для Иван Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта