Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Но вот фильтрация при таком выводе очень "хромает", фильтр строиться без учета валюты и ее курса.
При использование умного фильтра на входе мы имеем:
Вот код который поможет модифицировать фильтр так чтобы учитывались значений разных валют.
Данный код подходит для вызова его после компонента умный фильтр в шаблоне комплексного компонента 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', ), ), ) |
Назад в раздел
Подписаться на новые материалы раздела:
Загрузка...
Наверх