У меня тоже есть фильтраци по ценам от и до, и нужно учитывать валюту, реализуется стандартным фильтром Битрикс, не знаю возможно ли это было 2 года назад
[CODE]$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
);
}[/CODE]На выходе получаем примерно такой фильтр:
[CODE] 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
)
)[/CODE]
[CODE]$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
);
}[/CODE]На выходе получаем примерно такой фильтр:
[CODE] 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
)
)[/CODE]