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

Фильтр по цене

00 голосов
5
Всем добрый день.

В каталоге есть базовая цена CATALOG_PRICE_1, необходимо проверить эту цену товара в интервале от $_POST["price_from"] до $_POST["price_to"] - интервал введенный пользователем.

Использую функцию GetList , передаю массив вида

Код
$arFilterItems=array("><CATALOG_PRICE_1"=>array($_POST["price_from"],$_POST["price_to"]));

 
или так

Код
$arFilterItems=array(">=CATALOG_PRICE_1"=>$_POST["price_from"],"<=CATALOG_PRICE_1"=>$_POST["price_to"]) );

 
некорректно фильтруются товары:

если задать интервал от 15.000  до 20.000
появляется товар с ценой только 20.000

или

если задать интервал от 0 до 22.000, то не выдает товар с ценой 17.000

Тестирую на четырех товарах их цены 2.000; 17.000; 20.000; 22.000
спросил 09 Июнь, 13 от Dayran (840 баллов)

5 Ответы

00 голосов
ЧО НИКТО НЕ ЗНАЕТ ШТОЛЕ
ответил 09 Июнь, 13 от Dayran (840 баллов)
00 голосов
Цитата
Coupe пишет:
ЧО НИКТО НЕ ЗНАЕТ ШТОЛЕ
Извиняюсь за нетактичность, но это воспринимается как возмущенный крик неграмотного человека.
Цитата
Coupe пишет:
некорректно фильтруются товары:
Для начала попробуйте преобразовать значения из $_POST к численному типу, например:
Код
$PriceFrom = IntVal($_POST["price_from"]);
$PriceTo = IntVal($_POST["price_to"]);
Для какого класса используете GetList? Компоненты используются?
У меня все работает
Код
CIBlockElement::GetList(false, array("IBLOCK_ID"=>"3", ">=CATALOG_PRICE_1"=>"100")); 
ответил 19 Июнь, 13 от SleepLess (1,220 баллов)
00 голосов
Использую функцию GetList() класс CIBlockElement в шаблоне компонента catalog.section
Воспользовался функцией IntVal () Не помогло.

Товары фильтруются , но некорректно

Например в каталоге есть товары с ценой 20.000 и 22.000, есть передать массив в GetList с параметрами фильтрации то появляется товар с ценой 22.000
$price_from = 20.000
$price_to 22.000

Код
$arFilterItems[">=CATALOG_PRICE_1"]=$price_from ;
$arFilterItems["<=CATALOG_PRICE_1"]=$price_to;
   
 
ответил 23 Сен, 13 от Dayran (840 баллов)
00 голосов
Вы условие задаете больше или равно и соответственно меньше или равно, все верно у вас и должны появляться элементы где цена 20000 и 22000.

Код
 $arFilterItems["<CATALOG_PRICE_1"]=$price_to;
Должно помочь.
ответил 22 Дек, 13 от Reihent (580 баллов)
00 голосов
"больше или равно" и "меньше либо равно" по идее верно, может не фильтровать (неверно фильтровать), если в фильтре не задан IBLOCK_ID.

Меня честно, напрягло, что getlist, внутри шаблона catalog.section, не проще этот фильтр самому компоненту отдавать (если задача нестандартная, то не прав smile;))
ответил 07 Апр, 14 от 4680 (260 баллов)

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

0 голосов
0 ответов
спросил 02 Фев, 18 от аноним
0 голосов
1 ответ
0 голосов
3 ответов