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->producer
   ? $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');

    10.06.2020 08:53:45
    hostmarketplace

    Без темы

    Не совсем понимаю, вы же и решение написали после вопроса.

    10.06.2020 09:10:37
    hostcms

    Без темы

    Спрашивается как совместить сортировку по цене и наличию на складе

    Мне тоже интересно

    13.11.2020 07:48:18
    HostDEV.pw

    Без темы

    Вначале логически описать, как должно работать совмещение, а затем в чем именно возникает сложность при реализации описанной логики.

    13.11.2020 09:10:34
    hostcms