Сортировка по цене список модификации товара

#
Сортировка по цене список модификации товара
Доброго времени суток. Хочется отсортировать вывод модификации по умолчанию по цене от малого до большого.  Штатно сортировка происходит как настроено в ИМ https://www.hostcms.ru/documentation/modules/shop/add/ см. Закладка «Сортировка».
У модификации могут быть цены в разных валютах.
orderBy('price', 'ASC')
не пробовал, думаю не вариант. Надо конвертировать цены модификаций на валюту магазина. Может кто сталкивался поделитесь?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Сортировка по цене список модификации товара
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Сортировка по цене список модификации товара
alexpimnev,
Для модификаций через Хук? Есть пример?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Сортировка по цене список модификации товара
Seri,
а зачем хук? вы же написали что используете orderBy('price', 'ASC' и сказали что:
Seri писал(а):
Надо конвертировать цены модификаций на валюту магазина

я дал ссылку на пример, как это делается
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Сортировка по цене список модификации товара
alexpimnev писал(а):
а зачем хук?
Затем что бы хотелось такая сортировка срабатывала только в карточке товара.
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Сортировка по цене список модификации товара
Seri,
ну вы так и пишите, а то не понятно где эта сортировка нужна и для чего
и опять же если это модификации, которые выводятся стандартно для товара, то если посмотреть в Shop_Item_Model, то там есть подходящий хук shop_item.onBeforeSelectModifications
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Сортировка по цене список модификации товара
Смотрю: Ограничение выборки модификаций для товара
Выбираем модификации с остатком на складе больше 0.
static public function onBeforeShowXmlModifications($object, $args)
{
   $args[0]->queryBuilder()
   ->select('shop_items.*')
   ->leftJoin('shop_warehouse_items', 'shop_warehouse_items.shop_item_id', '=', 'shop_items.id')
   ->groupBy('shop_items.id')
   ->having(Core_QueryBuilder::expression('SUM(shop_warehouse_items.count)'), '>', 0);
}

Работает. Возможно таким образом?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Сортировка по цене список модификации товара
alexpimnev писал(а):
shop_item.onBeforeSelectModifications
Спасибо за подсказку. Вроде заработало.
static public function onBeforeSelectModifications($object, $args)
        {
            // Получаем список валют магазина
            $aShop_Currencies = Core_Entity::factory('Shop_Currency')->findAll();

            $query_tax = 'IF(`shop_taxes`.`tax_is_included`, 0, `shop_items`.`price` * `shop_taxes`.`rate` / 100)';
            $query_currency_switch = "`shop_items`.`price` + {$query_tax}";
            foreach ($aShop_Currencies as $oShop_Currency)
            {
                // Получаем коэффициент пересчета для каждой валюты
                $currency_coefficient = Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
                    $oShop_Currency, $object->Shop->Shop_Currency
                );

                $query_currency_switch = "IF (`shop_items`.`shop_currency_id` = '{$oShop_Currency->id}', IF (COUNT(`shop_discounts`.`id`), ((`shop_items`.`price` + {$query_tax}) * (1 - SUM(IF(`shop_discounts`.`type` = 0, `shop_discounts`.`value`, 0)) / 100)) * {$currency_coefficient} - SUM(IF(`shop_discounts`.`type`, `shop_discounts`.`value`, 0)), (`shop_items`.`price`) * {$currency_coefficient}), {$query_currency_switch})";
            }

            $current_date = date('Y-m-d H:i:s');

            $args[0]->queryBuilder()
                ->select('shop_items.*')
                ->select(array(Core_QueryBuilder::expression($query_currency_switch), 'absolute_price'))
                ->leftJoin('shop_item_discounts', 'shop_items.id', '=', 'shop_item_discounts.shop_item_id')
                ->leftJoin('shop_discounts', 'shop_item_discounts.shop_discount_id', '=', 'shop_discounts.id', array(
                    array('AND ' => array('shop_discounts.active', '=', 1)),
                    array('AND ' => array('shop_discounts.deleted', '=', 0)),
                    array('AND' => array('shop_discounts.start_datetime', '<=', $current_date)),
                    array('AND (' => array('shop_discounts.end_datetime', '>=', $current_date)),
                    array('OR' => array('shop_discounts.end_datetime', '=', '0000-00-00 00:00:00')),
                    array(')' => NULL)
                ))
                ->leftJoin('shop_taxes', 'shop_taxes.id', '=', 'shop_items.shop_tax_id')
                ->groupBy('shop_items.id')
                ->clearOrderBy()
                ->orderBy('absolute_price', 'ASC');
        }

if ($Shop_Controller_Show->item)
    {
        Core_Event::attach('shop_item.onBeforeSelectModifications', array('Shop_Item_Observer', 'onBeforeSelectModifications'));
    }
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация