Страница 1 из 1

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

Добавлено: 06.09.2019, 07:36
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;

Добавлено: 06.09.2019, 09:26
korshunov
Пробуйте

$order = '( (SELECT count(pv.id)
FROM __variants pv
WHERE (pv.stock > 0 OR pv.stock IS NULL) AND p.id = pv.product_id)>0 ) DESC, p.position DESC';

Добавлено: 06.09.2019, 12:41
dimon
korshunov писал(а):Пробуйте

$order = '( (SELECT count(pv.id)
FROM __variants pv
WHERE (pv.stock > 0 OR pv.stock IS NULL) AND p.id = pv.product_id)>0 ) DESC, p.position DESC';
Все Ок, получилось, спасибо!

Добавлено: 20.09.2019, 08:48
sh877
Как реализовать данные решения для версии OkayCMS 3.0.2

Добавлено: 23.09.2019, 07:12
zyxer
sh877 писал(а):Как реализовать данные решения для версии OkayCMS 3.0.2
нужно в Okay/Entities/ProductsEntity в методе customOrder добавить еще один кейс.

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

case 'stock' :
    $orderFields = [
        "( (SELECT count(pv.id)
        FROM __variants pv
        WHERE (pv.stock > 0 OR pv.stock IS NULL) AND p.id = pv.product_id)>0 ) DESC",
        "p.position DESC",
    ];
    break;

Обратите внимание, $orderFields это массив с двух элементов. Доработку в контроллере я так понимаю вы сами сможете реализовать? CategoryController это аналог старого ProductsView