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

Маска

Описание

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

ОперацияЗначение Описание
пустая строкаФильтр по полю применяться не будет. Будут выбраны все значения.
"?"не пустая строкаЗначением фильтра должна быть строка которая может содержать сложную логику.
"%", "!%"не пустая строкаБудет выполнен регистронезависимый поиск подстроки.
"><" или "!><"должно быть массивом с двумя элементамиБудет выполнена проверка на попадание в диапазон заданный элементами массива значения фильтра. Включительно. Если перед полем этого указано отрицание (символ "!"), то будут выбраны значения не попадающие в диапазон.
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-2020, «1С-Битрикс», 2020
Наверх