Перейти к содержанию
Официальный форум поддержки Simpla

Сортировка Товара По Умолчанию (Переносим Отсутствующие Товары Вниз Списка) [Simpla 2.2.4]


Рекомендуемые сообщения

Есть сортировка "по цене", которая перемещает вниз все товары, которых нет в наличии

$order = 'IF((SELECT COUNT(*) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1), 1, 0) DESC, (SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
 

Сортировка работает отлично

 

Вопрос: Как сделать сортировку "по умолчанию", которая также перемещает отсутствующие товары вниз списка, но сохраняет свои функции?

Ссылка на сообщение
Поделиться на другие сайты

Набросал вот такой вариант:

api/Products.php

case 'position':
$order = '(SELECT p.position FROM __variants pv WHERE (p.position IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';
break;

Сортировка остается по умолчанию (как мы указали в админке), но все товары с 0 количеством на складе, перемещает вниз списка.

 

Код работает, но может можно сделать лучше? Уважаемые знатоки, хочется услышать ваше мнение. Заранее спасибо

Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Убрал лишнее. Все равно не могу понять, при каком сценарии это будет работать неправильно?

$order = '(SELECT p.position FROM __variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC';
 
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Подскажите пожалуйста куда именно вставлять или что-то заменить? Вот мой код с файла products.php:

 

if(!empty($filter['sort']))
            switch ($filter['sort'])
            {
                case 'position':
                $order = 'p.position';
                if ($filter['orderby'] == "asc"){$order1='';}
                break;
                case 'name':
                $order = 'p.name';
                break;
                case 'price':
                $order = 'IF((SELECT COUNT(*) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1), 1, 0) DESC, (SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
                break;

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...