Предлагаю простое но полезное решение, которое переместит товары, которых нет на складе в конец списка.
В файле api/Products.php внутри функции get_produtcs находим такой фрагмент кода
Код: Выделить всё
if(!empty($filter['sort'])) {
switch ($filter['sort']) {
case 'rand':
$order = 'RAND()';
break;
case 'position':
$order = 'p.position DESC';
break;
case 'name':
$order = 'p.name ASC';
break;
case 'name_desc':
$order = 'p.name DESC';
break;
case 'rating':
$order = 'p.rating ASC';
break;
case 'rating_desc':
$order = 'p.rating DESC';
break;
case 'created':
$order = 'p.created DESC';
break;
case 'price':
$order = "(SELECT -floor(IF(pv.currency_id=0 OR c.id is null,pv.price, pv.price*c.rate_to/c.rate_from)*$coef)
FROM __variants pv
LEFT JOIN __currencies c on c.id=pv.currency_id
WHERE
p.id = pv.product_id
AND pv.position=(SELECT MIN(position)
FROM __variants
WHERE
product_id=p.id LIMIT 1
)
LIMIT 1) DESC";
break;
case 'price_desc':
$order = "(SELECT -floor(IF(pv.currency_id=0 OR c.id is null,pv.price, pv.price*c.rate_to/c.rate_from)*$coef)
FROM __variants pv
LEFT JOIN __currencies c on c.id=pv.currency_id
WHERE
p.id = pv.product_id
AND pv.position=(SELECT MIN(position)
FROM __variants
WHERE
product_id=p.id LIMIT 1
)
LIMIT 1) ASC";
break;
case 'position':
$order = 'p.position DESC';
break;
}
}
После него вставляем следующее
Код: Выделить всё
if(!empty($filter['sort'])){
$order = 'IF(pv.stock < 1,1,0),'.$order;
$variant_join = $this->db->placehold('LEFT JOIN (SELECT product_id,MAX(IFNULL(stock,?)) as stock FROM __variants GROUP BY product_id) pv ON p.id=pv.product_id', $this->settings->max_order_amount);
}
Готово!