1C-Битрикс: Управление сайтом

Типы фильтрации

В большинстве функций и методов модуля информационных блоков, выбирающих списки, в фильтрах возможно использование различных типов фильтрации. Символы типов фильтрации указываются непосредственно перед названием фильтруемого поля.

Типы:

  • (пустой) - для строковых полей означает поиск по маске (в маске: "%" - произвольное число любых символов, "_" - один произвольный символ), для полей с нестроковыми типами поиск "равно".
<?
// найти элементы у которых название начинается на "#"
$res = CIBlockElement::GetList(Array(), Array("NAME"=>"#%"));

// найти элементы с идентификатором 100
$res = CIBlockElement::GetList(Array(), Array("ID"=>"100"));
?>
  • "!" - для строк выражение не попадающее под маску, или не равно (для остальных типов полей).
<?
// найти элементы у которых название не начинается на "#"
$res = CIBlockElement::GetList(Array(), Array("!NAME"=>"#%"));
?>
  • "?" - с применением логики, работает только для строковых свойств.
<?
// найти элементы у которых название содержит "One" или "Two"
$res = CIBlockElement::GetList(Array(), Array("?NAME"=>"One | Two"));
?>
  • "<" - меньше;
  • "<=" - меньше либо равно;
  • ">" - больше;
  • ">=" - больше либо равно.
<?
// найти элементы у которых название начинается на "A"
$res = CIBlockElement::GetList(Array(), Array(">=NAME"=>"A", "<NAME"=>"B"));

// найти элементы с идентификатором большим 100
$res = CIBlockElement::GetList(Array(), Array(">ID"=>"100"));
?>
  • "=" - равно;
  • "!=" - не равно.
<?
// найти элементы у которых название равно "ELEMENT%1"
$res = CIBlockElement::GetList(Array(), Array("=NAME"=>"ELEMENT%1"));
?>
  • "%" - подстрока;
  • "!%" - не подстрока.
<?
// найти элементы у которых в названии есть символ процента "%"
$res = CIBlockElement::GetList(Array(), Array("%NAME"=>"%"));
?>
  • "><" - между;
  • "!><" - не между.

В качестве аргумента данные типы фильтров принимает массив вида Array("значение ОТ", "значение ДО")

<?
// найти элементы у которых название начинается между "A" и "B" или между "D" и "E"
$res = CIBlockElement::GetList(Array(), Array("><NAME"=>Array(Array("A", "B"), Array("D", "E"))));

// найти элементы, у которых дата начала активности не в периоде 2003 года
$res = CIBlockElement::GetList(Array(),
                               Array("!><DATE_ACTIVE_FROM"=>
                                     Array(date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), 
                                                mktime(0,0,0,1,1,2003)),
                                           date($DB->DateFormatToPHP(CLang::GetDateFormat("FULL")), 
                                                mktime(0,0,0,1,1,2004)))));
?>

Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
0
Иван Неслуховский
Поиск строки с параметром "=" идёт без учёта регистра (т.е. vilya = Vilya и т.п.).
0
Роберт Басыров
Рассмотрим несколько частных случаев фильтрации:


Код
$arFilter = array("PROPERTY_CML2_SCAN_CODE") =>false - используется, чтобы выбрать все элементы с незаполненными свойствами; 
$arFilter = array("PROPERTY_CML2_SCAN_CODE") =>"" - используется, чтобы выбрать все элементы;  
$arFilter = array("PROPERTY_CML2_SCAN_CODE") =>"qwe" - при фильтрации элементов проверяется точное совпадение с заданными свойствами; 
$arFilter = array("?PROPERTY_CML2_SCAN_CODE") =>"qwe" - при фильтрации элементов проверяется наличие заданной подстроки свойствах. 
$arFilter = array("!PROPERTY_CML2_SCAN_CODE") =>false - используется, чтобы выбрать только элементы с заполненными свойствами; 
$arFilter = array("!PROPERTY_CML2_SCAN_CODE") =>"" - используется, чтобы выбрать все элементы; 
$arFilter = array("!PROPERTY_CML2_SCAN_CODE") =>"qwe" - при фильтрации элементов проверяется точное совпадение с заданными свойствами; 
$arFilter = array("!?PROPERTY_CML2_SCAN_CODE") =>"qwe" - при фильтрации элементов проверяется наличие заданной подстроки свойствах. 
0
Роберт Басыров
Задача: Есть страница на которой находяться 2 комплексныx компонента инфоблоков, связанные между собой по одному из свойств. Как настроить фильтрацию, чтобы среди элементов ифоблока показывались только связанные?
Решение:
Код
<? 
  $arrFilter = array(); 
  $arrFilter['!PROPERTY_<код свойства>'] = false; 
?> 

arrFilter - подставьте в поле имени фильтра в компоненте.
0
Дмитрий IP-Suvorov
Отдельного рассмотрения заслуживает случай фильтрации по свойству типа "Дата/время"

Свойство типа Дата/Время "внутре" хранится как строковое с датой в формате YYYY-MM-DD HH:MI:SS.
Соответственно сортировка по значению такого свойства будет работать корректно, а вот значение для фильтрации формируется примерно так:
Код
$cat_filter[">"."PROPERTY_available"] = date("Y-m-d");


Обсуждение: http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic6561/message39617/#message39617
© «Битрикс», 2001-2012, «1C-Битрикс», 2012