Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Но вот фильтрация при таком выводе очень "хромает", фильтр строиться без учета валюты и ее курса.
При использование умного фильтра на входе мы имеем:
Вот код который поможет модифицировать фильтр так чтобы учитывались значений разных валют.
Данный код подходит для вызова его после компонента умный фильтр в шаблоне комплексного компонента section.php
И в итоге мы получим следующий фильтр.
То есть мы считаем, что фильтр у нас задан в валюте, которая указанна в настройках компонента и конвертируем ее значения во все валюты которые у нас есть в системе.
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Преобразуем фильтр по цене
Не так давно в компоненте каталог появилась возможность выводить цены в одной валюте. Все работает замечательно.Но вот фильтрация при таком выводе очень "хромает", фильтр строиться без учета валюты и ее курса.
При использование умного фильтра на входе мы имеем:
$arrFilter = array ( 'OFFERS' => NULL, '><CATALOG_PRICE_1' => array ( 0 => '1572', 1 => '11405', ), ); |
<? // Elements dop filter global ${$arParams["FILTER_NAME"]}; $ardopFilter = &${$arParams["FILTER_NAME"]}; //echo htmlspecialcharsbx(var_export($ardopFilter,1)); foreach ($ardopFilter as $key=>$val){ $match = array(); preg_match_all('/CATALOG_PRICE_(\S+)/msi',$key,$match); if(count($match[1][0])>0){ unset($ardopFilter[$key]); $dopFilter = array( "LOGIC" => "OR", ); $obCurrency = CCurrency::GetList(); while($arCurrency = $obCurrency->Fetch()){ if($arParams["CURRENCY_ID"] == $arCurrency['CURRENCY']){ $dopFilter[] = array( $key => $val, 'CATALOG_CURRENCY_'.$match[1][0] => $arCurrency['CURRENCY'], ); }else{ if(is_array($val)) $dopFilter[] = array( $key => array( CCurrencyRates::ConvertCurrency($val[0],$arParams["CURRENCY_ID"],$arCurrency['CURRENCY']), CCurrencyRates::ConvertCurrency($val[1],$arParams["CURRENCY_ID"],$arCurrency['CURRENCY']), ), 'CATALOG_CURRENCY_'.$match[1][0] => $arCurrency['CURRENCY'], ); else $dopFilter[] = array( $key => CCurrencyRates::ConvertCurrency($val,$arParams["CURRENCY_ID"],$arCurrency['CURRENCY']), 'CATALOG_CURRENCY_'.$match[1][0] => $arCurrency['CURRENCY'], ); } } } } $ardopFilter[] = $dopFilter; //echo htmlspecialcharsbx(var_export($ardopFilter,1)); ?> |
И в итоге мы получим следующий фильтр.
$arrFilter = array ( 'OFFERS' => NULL, 0 => array ( 'LOGIC' => 'OR', 0 => array ( '><CATALOG_PRICE_1' => array ( 0 => '1572', 1 => '11405', ), 'CATALOG_CURRENCY_1' => 'RUB', ), 1 => array ( '><CATALOG_PRICE_1' => array ( 0 => 51.829871414441, 1 => 376.03033300363, ), 'CATALOG_CURRENCY_1' => 'USD', ), 2 => array ( '><CATALOG_PRICE_1' => array ( 0 => 40.328373524885, 1 => 292.58594150847, ), 'CATALOG_CURRENCY_1' => 'EUR', ), 3 => array ( '><CATALOG_PRICE_1' => array ( 0 => 416.97612732095, 1 => 3025.198938992, ), 'CATALOG_CURRENCY_1' => 'UAH', ), ), ) |
Назад в раздел
Подписаться на новые материалы раздела: