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

CIBlockElement::GetList фильтрация

00 голосов
10
Появилось несколько вопросов по фильтрации в CIBlockElement::GetList.
1. Как фильтровать по свойству типа "Дата" - пробовал "PROPERTY_DATE"=>"15.05.2011" - не работает..
2. Как использовать тип проверки фильтра "между (><)? Имеется свойство PRICE и два значение - от и до. пишу "PROPERTY_PRICE"><Array($PRICE_1,$PRICE_2) - выдает ошибку php...
3. И самое интересное, если фильтрация идет сразу по нескольким параметрам - делать один $arFilter или в зависимости от того, какие параметры есть?
Заранее благодарен за ответы. =)
спросил 09 Март, 13 от Snezhka (2,240 баллов)

10 Ответы

00 голосов
"><PROPERTY_PRICE"=>Array($PRICE_1,$PRICE_2)
ответил 09 Март, 13 от Ravy (180 баллов)
00 голосов
Фильтр по дате:
1.
Код
$time = mktime(0,0,0,5,15,2007);
   $arFilter[">=PROPERTY_DATE"] = ConvertDateTime($time,"YYYY-MM-DD")." 00:00:00";

3 Один $arFilter;
ответил 17 Март, 13 от Saitan (260 баллов)
00 голосов
Цитата
3 Один $arFilter;

т.е. даже если одно из свойств не заданно, то по остальным фильтр сработает верно?
ответил 21 Апр, 13 от Snezhka (2,240 баллов)
00 голосов
Код
$time = mktime(0,0,0,5,15,2007);
   $arFilter[">=PROPERTY_DATE"] = ConvertDateTime($time,"YYYY-MM-DD")." 00:00:00";

хм..выводит 00:00:00
я так понимаю, что формат для фильтрации нужен 2011-05-15?
ответил 15 Авг, 13 от Snezhka (2,240 баллов)
00 голосов
Вот как делает это Битрикс, например:

Код
if($arParams["CHECK_DATES"])
   $arFilter["ACTIVE_DATE"] = "Y";


Т.е. проверяете параметр, если он задан, то устанавливает его, если нет, то игнорирует.
ответил 15 Ноя, 13 от Saitan (260 баллов)
00 голосов
нее, у меня именно дата как свойство и по нему фильтрация. грубо говоря не могу понять в каком формате нужно дать Битриксу дату, что бы он понял ее =)
ответил 23 Фев, 14 от Snezhka (2,240 баллов)
00 голосов
Цитата
Олег Белов пишет:
я так понимаю, что формат для фильтрации нужен 2011-05-15?


Нужно привести к тому формату, который записан в базе данных, а это "YYYY-MM-DD HH:MM:SS".

С mktime неправильно написал, вот рабочий код:

Код
$time = "15.05.2007";   
$arFilter[">=PROPERTY_DATE"] = ConvertDateTime($time,"YYYY-MM-DD")." 00:00:00";
ответил 15 Июнь, 14 от Saitan (260 баллов)
00 голосов
Спасибо!
Но собственно теперь загвоздка одна - запихнул в фильтр все фильтруемые свойства, подставил значения которые точно есть в иблоке, а фильтр выдает 0..имеет смысл проверять по каждому свойству? или есть еще какой-то способ поймать баг?
ответил 13 Окт, 14 от Snezhka (2,240 баллов)
00 голосов
Нужно понять, какое свойство, у Вас отсекает выборку. Чтобы не делать лишней работы, начать нужно с самых "подозрительных" (наиболее вероятных, вызывающих отсечку), например проверять свойство "ACTIVE"=>"Y", точно не стоит и так понятно, хотя в крайнем случае галочку активности инфоблока проверить все же нужно ;)
ответил 13 Фев, 15 от Saitan (260 баллов)
00 голосов
Собственно не срабатывает фильтр как раз из-за фильтрации от и до в свойстве PRICE
Сейчас выглядит так:
"><PROPERTY_PRICE"=>Array($PRICE_1,$PRICE_2),

есть елемент с ценой в 10000, я задаю $PRICE_1=100,$PRICE_2=20000
но этот элемент не находится..где ошибся? =)
ответил 25 Май, 15 от Snezhka (2,240 баллов)

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

0 голосов
3 ответов
0 голосов
3 ответов
0 голосов
1 ответ
0 голосов
0 ответов
спросил 07 Май, 14 от IRISH (100 баллов)
0 голосов
2 ответов
спросил 04 Май, 14 от Snezhka (2,240 баллов)