====== Сортировка по величине скидки для адаптивных фильтров ====== Была задача реализовать сортировку товаров по абсолютной величине скидки, ниже представлена реализация такой сортировки для [[private:market:extended_filters:programmist|адаптивных фильтров]]. Для добавления нового способа сортировки в адаптивных фильтрах необходимо расширить метод ''setSorting'' контроллера ''Extendedfilters_Shop'' и добавить желуемую сортировку следующим образом: _sorting)) { $usedSorting[] = 'discount_0'; $sAbsoluteDiscountField = 'absolute_discount'; $sAbsoluteDiscountSwitch = '0'; if (count($this->getArrayActiveDiscountsId())) { // Получаем список валют магазина $aoShopCurrencies = Core_Entity::factory('Shop_Currency')->findAll(); foreach ($aoShopCurrencies as $oShopCurrency) { // Получаем коэффициент пересчета для каждой валюты $currencyCoefficient = Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency( $oShopCurrency, $this->getEntity()->Shop_Currency ); $sAbsoluteDiscountSwitch = " IF (`shop_items`.`shop_currency_id` = '{$oShopCurrency->id}', IF (shop_discounts.value, IF (shop_discounts.type, IF (`shop_discounts`.`value` < `shop_items`.`price` * {$currencyCoefficient}, `shop_discounts`.`value`, 0 ), `shop_items`.`price` * shop_discounts.value * {$currencyCoefficient} / 100 ), 0 ), {$sAbsoluteDiscountSwitch}) "; } } Core_Event::attach('shop_item.onCallabsolute_discount', function () {}); $this ->_Shop_Items ->queryBuilder() ->select(array(Core_QueryBuilder::expression($sAbsoluteDiscountSwitch), $sAbsoluteDiscountField)) ->orderBy($sAbsoluteDiscountField, 'DESC'); } // ... } } Метод ''setSorting'' достаточно объемный, необходимо оставить все его тело и интегрировать туда этот код. Используемый здесь подход можно адаптировать и применить для стандартных фильтров. Страницу создал Максим Засорин 20.10.17 в 16:37