Помощь AS4 Вывод товаров которых нет в наличии

Nirealto

Постоялец
Регистрация
10 Июл 2015
Сообщения
125
Реакции
89
Нужно вывести товары которых нет в наличии после товаров которые есть в наличии(Для просмотра ссылки Войди или Зарегистрируйся), в настройках нашёл "Только поиск продукции на складе", но это не совсем то что нужно, оно просто скрывает все товары которых нет в наличии. Подскажите, в какую сторону копать?
 
Нужно вывести товары которых нет в наличии после товаров которые есть в наличии(Для просмотра ссылки Войди или Зарегистрируйся), в настройках нашёл "Только поиск продукции на складе", но это не совсем то что нужно, оно просто скрывает все товары которых нет в наличии. Подскажите, в какую сторону копать?
В выборке нужно использовать 2 ORDER BY
1 будет stock.quantity > 0 DESC
2 тот который в запросе и это решит вашу проблему.
 
В выборке нужно использовать 2 ORDER BY
1 будет stock.quantity > 0 DESC
2 тот который в запросе и это решит вашу проблему.
Я не совсем корректно описал задачу, нужна одновременная сортировка по первому параметру(цена, имя) и по количеству.
Как я понял копать нужно вообще не в модуле, а самой престе, точнее в classes/Category.php в оригинале в функции public function getProducts($params)
есть строки:
Код:
$sql .= ' ORDER BY '.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;

я поменял их на:
Код:
$sql .= ' ORDER BY stock.`quantity` > 0 DESC,'.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;

И теперь товар которого нет в наличии выводиться на самой последней странице самым первым в списке, хотя должен идти последним ибо перед ним ещё есть товары которые есть в наличии.
 
Нем
Я не совсем корректно описал задачу, нужна одновременная сортировка по первому параметру(цена, имя) и по количеству.
Как я понял копать нужно вообще не в модуле, а самой престе, точнее в classes/Category.php в оригинале в функции public function getProducts($params)
есть строки:
Код:
$sql .= ' ORDER BY '.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;

я поменял их на:
Код:
$sql .= ' ORDER BY stock.`quantity` > 0 DESC,'.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;

И теперь товар которого нет в наличии выводиться на самой последней странице самым первым в списке, хотя должен идти последним ибо перед ним ещё есть товары которые есть в наличии.
непонял... как это?
 
Нем

непонял... как это?
Для просмотра ссылки Войди или Зарегистрируйся
Товары отсортированы по цене и по количеству, первые 6 страниц всё нормально и сортирует как и должно, но на последней, седьмой, странице сначала идут товары с нулевым количеством на складе, а потом нормальные товары, а должно быть наоборот, сначала идут товары с quantity > 0, а затем товары которых нет в наличии. Не знаю как по-человечески всё это описать.

Всё таки AS4 тут причём, криво-косо работает просто в категории, но вообще не работает в фильтре, подскажите в каком месте AS4 берёт товары ибо SORT BY в нём только в одном месте и это не то что нужно.
 
Последнее редактирование:
Всё очень сумбурно, несколько перефразирую. Нужно сделать сортировку по двум параметрам, по цене и по параметру show_price(quantity или по чему угодно, главное что по двум параметрам), в престе это реализуется, в /classes/Category.php, примерно вот так:
Код:
public function getProducts($params) 
{
    ...
$sql .= ' ORDER BY 
p.`show_price` //второй параметр сортировки
DESC, // сортировка в обратном порядке
'.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).' //первый параметр сортировки(цена, имя и тд)
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n; // ограничение товаров на вывод
    ...
}
Это способ не работает нормально на странице где пересекаются товары с разным вторым параметром, но пусть хоть так.

Но всё это счастье работает только на странице категории без фильтров, как только я включаю любой фильтр(использую AdvancedSearch4) всё перестаёт работать ибо AS4 сам сортирует товары, собственно вопрос, в каком месте он сортирует товары и что нужно сделать чтобы он сортировал по двум параметрам?
 
Всё очень сумбурно, несколько перефразирую. Нужно сделать сортировку по двум параметрам, по цене и по параметру show_price(quantity или по чему угодно, главное что по двум параметрам), в престе это реализуется, в /classes/Category.php, примерно вот так:
Код:
public function getProducts($params)
{
    ...
$sql .= ' ORDER BY
p.`show_price` //второй параметр сортировки
DESC, // сортировка в обратном порядке
'.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).' //первый параметр сортировки(цена, имя и тд)
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n; // ограничение товаров на вывод
    ...
}
Это способ не работает нормально на странице где пересекаются товары с разным вторым параметром, но пусть хоть так.

Но всё это счастье работает только на странице категории без фильтров, как только я включаю любой фильтр(использую AdvancedSearch4) всё перестаёт работать ибо AS4 сам сортирует товары, собственно вопрос, в каком месте он сортирует товары и что нужно сделать чтобы он сортировал по двум параметрам?
Нужно поправить класс в котором функция выборки для фильтра.
AdvancedSearchClass.php
 
Назад
Сверху