Документация для разработчиков

Маска

Значения фильтра этого типа обрабатываются по следующим правилам:

ОперацияЗначение Описание
пустая строкаФильтр по полю применяться не будет. Будут выбраны все значения.
"?"не пустая строкаЗначением фильтра должна быть строка которая может содержать сложную логику.
"%", "!%"не пустая строкаБудет выполнен регистронезависимый поиск подстроки.
"><" или "!><"должно быть массивом с двумя элементамиБудет выполнена проверка на попадание в диапазон заданный элементами массива значения фильтра. Включительно. Если перед полем этого указано отрицание (символ "!"), то будут выбраны значения не попадающие в диапазон.
falseЕсли перед полем этого фильтра указано отрицание (символ "!"), то будут выбраны все не пустые значения.
Иначе будут выбраны пустые значения - NULL или те у которых длина равна нулю.
"=" будет приведено к верхнему регистру Проверка на точное совпадение значения. Если указано отрицание, то проверка будет выполнена на неравенство. Проверка регистронезависимая.
">", "<", ">=", "<="будет приведено к верхнему регистру"Больше", "меньше", "больше или равно" и "меньше или равно". Можно использовать "!" для отрицания условия. Не зависит от регистра.
не указанабудет приведено к верхнему региструЗначение фильтра будет служить маской для отбора значений. "%" - любое количество любых символов, "_" - один любой символ.

Примечание: если значение фильтра массив, то для каждого элемента будут формироваться соответствующие условия, а затем они будут объединены по "ИЛИ". В случае отрицания условия будут объединяться по "И".

См. также

Примеры использования

<?
$arFilter = (
...
"NAME" => false, //Не вернет ничего т.к. нет пустых NAME
"NAME" => "", //вернет все т.к. фильтр не будет применен
"NAME" => "А%", //вернет все NAME начинающиеся на "A"
"?NAME" => "(мама || мачеха) && (папа || отчим)", //Все имеют двух родителей
">NAME" => "э", //Все начинающиеся на Э, Ю, Я.
...
);
?>
// исключение из выборки всех записей, в названиях которых есть вхождения jpg, jpeg и png
$arFilter = array(
  "IBLOCK_ID"=>$IBLOCK_ID,
  "ACTIVE_DATE"=>"Y",
  "ACTIVE"=>"Y",
  "!NAME" => array("%.jpg%", "%.jpeg%", "%.png%")
);
//Есть очень большой каталог, несколько тысяч
//нужно сделать выбор по двум словам (например, "Citroen" и "Berlingo"), которые могут содержаться в одном из пользовательских свойств элементов.
//Как сделать через маску? 

//1-ый вариант маски:
$arFilter['PROPERTY_a_use'] = "%Citroen%Berlingo%";

//2-ой вариант маски:
$arFilter['?PROPERTY_a_use'] = "Citroen && Berlingo";

//Запрос
$getListFirst = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

//По производительности 2-ой вариант хуже, так как 1-ый вариант - это обычный LIKE запрос к БД, в то время как 2-ой вариант делает переработку фильтра запроса  
//С другой стороны, если в 1-ом варианте поменять местами слова, то ничего не найдется, а во 2-ом - должно сработать.


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

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2018, «1С-Битрикс», 2018
Наверх