Сортировка по цене на странице акций в Opencart

категория: , Дорабатываем, Полезности


Опубликовано: 22.09.2017 Просмотров: 136 Комментарии: 0


Сортировка по цене на странице акций в Opencart

С коробки сортировка на странице акции по цене работает не правильно. Исправляем баг Opencart


Недавно столкнулся с тем что мне надо было сделать сортировку по цене от меньшего к большему на странице Акции (product/special). Вся проблема заключается в том что такая сортировка предусмотрена в Opencart на странице акций, но она неправильно работает.

Вообще, что бы задать сортировку на странице категории где есть перечень товаров достаточно указать ее вверху файла а именно задать строку

$sort = 'p.price';

и немного ниже указать ASC или DESC, например

$order = 'ASC';

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

Но на странице акций этот трюк не подойдет. Почему так?

Дело в том что на этой странице все товары идут акционные и цена их берется из таблицы product_special где цена обозначается как ps.price. Но все равно когда мы поставили эти значения у нас нет сортировки по цене. Проблема в том что mysql там сортирует как текстовое значение а не как числовое. Для того что бы работало нам надо просто добавить в сортировку +0. Таким образом мы переведем в числовой формат и сортировка будет натуральной.

До изменений сортирует так: 1000, 11, 147 и т.п.

После правок сортировать будет как надо: 11, 147, 1000

Итак, приступим. Открываем файл catalog/model/catalog/product.php и находим метод getProductSpecials где строку:

$sql .= " ORDER BY " . $data['sort'];

Заменяем на:

if ($data['sort'] == 'ps.price') {
  $sql .= " ORDER BY (" . $data['sort'] . "+0)";
}else{
  $sql .= " ORDER BY " . $data['sort'];
}

чистим модификаторы и наслаждаемся результатами :)


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


Быстрый поиск

Похожее

Новое на сайте