У меня тоже есть фильтраци по ценам от и до, и нужно учитывать валюту, реализуется стандартным фильтром Битрикс, не знаю возможно ли это было 2 года назад
На выходе получаем примерно такой фильтр:
| Код |
|---|
$rsCurrency = CCurrency::GetList(($b="name"), ($order1="asc"), LANGUAGE_ID);
while($arCur = $rsCurrency->Fetch())
{
$arCurrency[$arCur["CURRENCY"]] = $arCur["AMOUNT"];
$arCurrencyName[]= $arCur["CURRENCY"];
}
$userCurrency = $_COOKIE["CURRENCY"]; //Валюта установленная на сайте юзером
$userInterval = 1;
if(!in_array($userCurrency, $arCurrencyName))
$userCurrency = intval($_GET["PRICE_INTERVAL"]);
$VAT = 0.18; //НДС
//$VAT = CCatalogVat::GetList(array(), array('ID' => 1));
$priceIntervals = array(
array("1","100"),
array("100","200"),
array("200","300"),
);
foreach ($arCurrency as $curName => $curValue):
$newInterval = array();
foreach ($priceIntervals as $price):
$start = round($price[0]*$arCurrency[$userCurrency]/ ($arCurrency[$curName]*($VAT+1)), 2);
$end = round($price[1]*$arCurrency[$userCurrency]/ ($arCurrency[$curName]*($VAT+1)), 2);
$newInterval[]= array( $start, $end);
endforeach;
$priceIntervalsCurrency[$curName] = $newInterval;
endforeach;
$priceFilter = array( "LOGIC" => "OR" );
foreach ($priceIntervalsCurrency as $curName => $interval) {
$priceFilter[] = array(
">=CATALOG_PRICE_1" => $interval[$userInterval][0],
"<=CATALOG_PRICE_1" => $interval[$userInterval][1],
"CATALOG_CURRENCY_1" => $curName
);
} |
| Код |
|---|
Array ( [LOGIC] => OR [0] => Array ( [>=CATALOG_PRICE_1] => 3.58 [<=CATALOG_PRICE_1] => 7.15 [CATALOG_CURRENCY_1] => USD ) [1] => Array ( [>=CATALOG_PRICE_1] => 2.81 [<=CATALOG_PRICE_1] => 5.62 [CATALOG_CURRENCY_1] => EUR ) [2] => Array ( [>=CATALOG_PRICE_1] => 118 [<=CATALOG_PRICE_1] => 236 [CATALOG_CURRENCY_1] => RUB ) [3] => Array ( [>=CATALOG_PRICE_1] => 2.27 [<=CATALOG_PRICE_1] => 4.54 [CATALOG_CURRENCY_1] => GBP ) ) |