Как сделать, чтобы товары с ценой "0" были в конце списка.

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 7 месяцев
Откуда: Харьков

Сообщение #1 dimon » 22.07.2019, 11:46

Как сделать, чтобы товары с ценой "0" были в конце списка.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #2 korshunov » 22.07.2019, 12:02

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

Подобная тема
http://forum.simplacms.ru/topic/8330-сортировка-т ... вар-c-кол-вом-0-в-конец-списк/

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #3 makki » 22.07.2019, 13:45

dimon писал(а):Как сделать, чтобы товары с ценой "0" были в конце списка.
файл api/Products.php

строка 109 вместо

Код: Выделить всё

case 'position':
                    $order = 'p.position DESC';
                    break;

напишите

Код: Выделить всё

case 'position':
                    $order = '( (SELECT count(pv.id)
                        FROM __variants pv                       
                        WHERE pv.price > 0 AND p.id = pv.product_id)>0 ) DESC, p.position DESC';
                    break;
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 7 месяцев
Откуда: Харьков

Сообщение #4 dimon » 23.07.2019, 05:19

makki писал(а):
dimon писал(а):Как сделать, чтобы товары с ценой "0" были в конце списка.
файл api/Products.php

строка 109 вместо

Код: Выделить всё

case 'position':
                    $order = 'p.position DESC';
                    break;

напишите

Код: Выделить всё

case 'position':
                    $order = '( (SELECT count(pv.id)
                        FROM __variants pv                       
                        WHERE pv.price > 0 AND p.id = pv.product_id)>0 ) DESC, p.position DESC';
                    break;
Спасибо, ваше решение все работает.


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 14 гостей