Как использовать arFilter, в Битрикс API
Без лишних вступлений, перейдем к одному из очень важных понятий — фильтрация элементов в Битриксе.
Битрикс arFilter
Вы уже знаете как выводить элементы и разделы. В документации 1С-Битрикс мы можем ясно видеть, что, не только приравнивание значений нам доступно но и:
- «!» — не равно
- «<» — меньше
- «<=» — меньше либо равно
- «>» — больше
- «>=» — больше либо равно
- «><» — между
На моей практике использовать «между» мне не доводилось. А вот с остальным все гораздо проще, чем может показаться на первый взгляд. Вам важно уловить несколько очень важных вещей, которые сделают ваш код чуть лучше.
Используя arFilter вы избавите себя от лишних проверок
И это действительно так. Предположим, что у нас уже есть свойство которое устанавливает, есть ли товар в наличии, и вам необходимо написать условие:
Если количество товара больше 0 или свойство Наличие = Да, то показываем товар
Так вот, если не знать про сложную логику фильтра (о которой я расскажу чуть ниже), то мы бы писали через старые добрые «if, else«, причем уже после получения параметров — но, этого можно избежать еще на этапе выборки данных.
Если использовать в скриптах arFilter и arSelect — вы исключите лишние данные
На самом деле этот код:
наглядно показывает, что ничего лишнего мы не будем передавать (важно не только указывать условия в фильтре, но и только те поля которые вы будете использовать, arSelect, или в данном случае последний массив). Записывать «больше-меньше» нужно таким вот образом:
Для остальных условий — аналогично, пишем перед свойством >, <, >=, <=, ! и вуаля.
Как написать фильтр со сложной логикой 1С-Битрикс
Вот мы и подошли к самому интересному и не очевидному. Сложный фильтр может принимать 2 значения AND и OR (И и ИЛИ). При этом сложность условия, опять же, ограничивается лишь вашей фантазией. Не будем ходить далеко, возьмем пример из документации:
Итак, для сложного фильтра, нам нужно создать массив, указать значение LOGIC в значение OR или AND, и после запятой создать 2 сравниваемых массива. Как видите, тут есть практически все условия о которых мы говорили выше (меньше, равно, больше или равно, не равно).
Битрикс $arFilter — как использовать подзапросы
Ситуация следующая — у нас есть каталог с оптовыми ценами, и есть товары с торговыми предложениями. Используем подзапросы при помощи CIBlockElement::SubQuery:
Первый «сложный» фильтр проверяет есть ли товар в наличии, а второй — выбирает только те товары, у которых оптовая цена (‘CATALOG_PRICE_3’) больше 0.
Надеюсь вам стало более понятно как работает $arFilter и что с ним можно делать.
Источник: http://forwww.com/how-to-use-filter-in-bitrix/