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

Маска

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

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

Примечание

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

См. также

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

<?
$arFilter = (
...
"NAME" => false, //Не вернет ничего т.к. нет пустых NAME
"NAME" => "", //вернет все т.к. фильтр не будет применен
"NAME" => "А%", //вернет все NAME начинающиеся на "A"
"?NAME" => "(мама || мачеха) && (папа || отчим)", //Все имют двух родителей
">NAME" => "э", //Все начинающиеся на Э, Ю, Я.
...
);
?>

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

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

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
0
Роберт Басыров
Задача: Вывести дерево разделов только до текушего раздела + потомки текущего раздела. Ну как в проводнике папки.

Решение:
Код
$arFilter['LEFT_MARGIN'] = $arResult['LEFT_MARGIN'];
$arFilter['RIGHT_MARGIN'] = $arResult['RIGHT_MARGIN']; 
0
Роберт Басыров
Вопрос: Есть очень большой каталог, несколько тысяч, у каждого задействовано много пользовательских св-в элемента для описания характеристик товара, нужно сделать выбор по двум словам, которые могут содержаться в одном из пользовательских св-в элементов.
Как сделать через маску?

Решение:
Например, нужны элементы содержащие в значении этого св-ва два слова "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-й вариант
Код
['PROPERTY_a_use'] = "%Citroen%Berlingo%"
- это обычный LIKE запрос к БД.
В то время как 2й вариант - делает переработку фильтра запроса (ради интереса можете сами посмотреть последовательность)

С другой стороны, если в 1-м варианте поменять местами слова, то ничего не найдется, а во втором - должно сработать.
© «Битрикс», 2001-2012, «1C-Битрикс», 2012