How To: Сортировка товаров
Указание направления сортировки возможно напрямую контроллеру показа Shop_Controller_Show
методом ->orderBy($column, $direction = 'ASC'), при сортировке по цене вы можете указывать price или absolute_price (синонимы), при этом расчет absolute_price будет добавлен автоматически.
$Shop_Controller_Show->orderBy('price', 'ASC');
Сложная сортировка товаров может быть задана через метод shopItems()
контроллера Shop_Controller_Show
, метод возвращает объект Shop_Item_Model
с настроенными ограничениями. Для удаления предыдущих установок сортировки используется clearOrderBy()
Сортировка по наличию и названию товара
Товары, отсутствующие на складе, выводятся в конце списка, это достигается использованием функции SIGN(X)
, которая для остатка на складе возвращает знак аргумента в виде -1, 0 или 1, в зависимости от того, является ли X отрицательным, нулем или положительным.
$fieldName = count($Shop_Controller_Show->getFilterProperties()) || count($Shop_Controller_Show->getFilterPrices())
? $Shop_Controller_Show->getFilterTableName() . '.shop_item_id'
: 'shop_items.id';
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', $fieldName)
->groupBy('shop_items.id')
->clearOrderBy()
->orderBy(Core_QueryBuilder::expression('SIGN(SUM(`shop_warehouse_items`.`count`))'), 'DESC')
->orderBy('shop_items.name', 'ASC');
$Shop_Controller_Show->show();
Комментарии
-
Сортировка с $Shop_Controller_Show->orderBy
А как реализовать сортировку для такого:
($sorting == 1 || $sorting == 2)
&& $Shop_Controller_Show->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');Без темы
Не совсем понимаю, вы же и решение написали после вопроса.
Без темы
Спрашивается как совместить сортировку по цене и наличию на складе
Мне тоже интересноБез темы
Вначале логически описать, как должно работать совмещение, а затем в чем именно возникает сложность при реализации описанной логики.