Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

фильтрации по цене с учетом валюты в компоненте bitrix:catalog.section

00 голосов
1
Описал процесс написания костылей для битрикс в плане фильтрации по цене с учетом валюты в компоненте bitrix:catalog.section

Не решился писать огромное полотно в форум - тому кому интересно посмотрите тут. Комментировать здесь. :)
спросил 21 Янв, 13 от ZakonD3D (600 баллов)

1 Ответ

00 голосов
У меня тоже есть фильтраци по ценам от и до, и нужно учитывать валюту, реализуется стандартным фильтром Битрикс, не знаю возможно ли это было 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
     )

)
ответил 21 Янв, 13 от Starsad (140 баллов)

Похожие вопросы

0 голосов
3 ответов
0 голосов
2 ответов
0 голосов
0 ответов
0 голосов
1 ответ
0 голосов
2 ответов