Для включения фильтра достаточно проделать следующее: перед вызовом компонента вставить код вида
$GLOBALS['Название_Фильтра'] = array(Массив с данными для фильтрации);
В параметрах компонента передать параметры включения фильтра и его название:
$APPLICATION->IncludeComponent(
.....
"USE_FILTER" => "Y",
"FILTER_NAME" => "Название_Фильтра",
.....
Дальше идут примеры, которые вы можете передать в $GLOBALS['Название_Фильтра']. В качестве "Название_Фильтра" буду использовать "arrFilter". Данные примеры собраны из нескольких источников. Вы можете писать свои примеры в комментариях - лучшие будут добавлены в тело заметки.
Для работы фильтра в компоненте не обязательно использовать глобальную переменную$GLOBALS. Вы можете создать обычную переменную с фильтром и передать её в параметреFILTER_NAMEпри вызове компонента.
// Обычная переменная с фильтром
$arrMyFilter = [
"ACTIVE" => "Y",
"!PROPERTY_DISCOUNTS" => false
];
// Передача имени переменной фильтра в параметре FILTER_NAME
$APPLICATION->IncludeComponent(
"bitrix:news.list",
"",
[
"IBLOCK_ID" => 5,
"USE_FILTER" => "Y",
"FILTER_NAME" => "arrMyFilter", // <-- просто имя переменной
"NEWS_COUNT" => 10,
"SORT_BY1" => "ACTIVE_FROM",
"SORT_ORDER1" => "DESC",
"CACHE_TYPE" => "A",
"CACHE_TIME" => 3600
]
);
То есть можно спокойно передавать фильтр без $GLOBALS, если код выполняется в той же области видимости, где вызывается компонент (например, внутри одного PHP-файла, шаблона или включаемой области).
Итак, погнали!
Базовые фильтры по полям элемента
Наличие непустого свойства. Если у инфоблока есть свойство с заданным кодом (DISCOUNTS), оно не пустое и активно:
$GLOBALS['arrFilter'] = array('ACTIVE' => 'Y', '!PROPERTY_DISCOUNTS' => false);
Выборка элементов по их ID, если нужен один конкретный:
$GLOBALS['arrFilter'] = array('ID' => 12);
Или несколько:
$GLOBALS['arrFilter'] = array('ID' => array(10,11,12,13));
Исключить элемент по ID (знак "!" перед ключом означает отрицание):
$GLOBALS['arrFilter'] = array('!ID' => 12);
Все элементы из раздела инфоблока по ID этого раздела. Например, из 90-го:
$GLOBALS['arrFilter'] = array("SECTION_ID" => 90);
Исключить целый раздел:
$GLOBALS['arrFilter'] = array("!SECTION_ID" => 90);
Элементы из нескольких разделов:
$GLOBALS['arrFilter'] = array("SECTION_ID" => array(90, 91, 92));
Выборка по символьному коду элемента:
$GLOBALS['arrFilter'] = array("CODE" => "aktsiya-letom-2026");
Только активные элементы и с определенной сортировкой:
$GLOBALS['arrFilter'] = array("ACTIVE" => "Y", "SORT" => 500);
Фильтры по датам (Date)
Элементы, созданные за текущий день:
$curdate = date('d.m.Y');
$GLOBALS['arrFilter'] = Array(">=DATE_ACTIVE_FROM" => $curdate);
Элементы, созданные за последние два дня (где 86400 - количество секунд). Умножая это значение на количество дней, получаем элементы за последние n (86400 * n) дней:
$from = date('d.m.Y', time() - 86400);
$to = date("d.m.Y");
$GLOBALS['arrFilter'] = Array(">=DATE_ACTIVE_FROM" => $from, "<=DATE_ACTIVE_FROM" => $to);
То же самое, но с датой создания, а не с датой начала активности:
$from = date('Y-m-d H:i:s', time() - 86400 * 30); // Созданные за последние 30 дней
$to = date("Y-m-d H:i:s");
$GLOBALS['arrFilterNew'] = Array(">=DATE_CREATE" => $from, "<=DATE_CREATE" => $to);
Элементы за конкретную дату (строго за 20 января 2026):
$GLOBALS['arrFilter'] = Array(
">=DATE_ACTIVE_FROM" => "20.01.2026",
"<=DATE_ACTIVE_FROM" => "20.01.2026 23:59:59"
);
Элементы только за вчерашний день:
$yesterday = date('d.m.Y', time() - 86400);
$GLOBALS['arrFilter'] = Array(
">=DATE_ACTIVE_FROM" => $yesterday,
"<=DATE_ACTIVE_FROM" => $yesterday . " 23:59:59"
);
Элементы за текущую неделю (с понедельника):
$monday = date('d.m.Y', strtotime('monday this week'));
$GLOBALS['arrFilter'] = Array(">=DATE_ACTIVE_FROM" => $monday);
Элементы за текущий месяц:
$firstDay = date('01.m.Y');
$GLOBALS['arrFilter'] = Array(">=DATE_ACTIVE_FROM" => $firstDay);
Элементы, у которых дата начала активности вообще не задана:
$GLOBALS['arrFilter'] = Array("DATE_ACTIVE_FROM" => false);
Строковые фильтры (String)
Для строковых полей и свойств можно использовать поиск по шаблону. Знак процента % заменяет любое количество символов, знак подчеркивания _ заменяет ровно один символ.
Название начинается с "Акция":
$GLOBALS['arrFilter'] = array("NAME" => "Акция%");
Название заканчивается на "2026":
$GLOBALS['arrFilter'] = array("NAME" => "%2026");
Содержит слово "скидка" в любом месте:
$GLOBALS['arrFilter'] = array("NAME" => "%скидка%");
Название ровно из 5 символов (пять подчеркиваний):
$GLOBALS['arrFilter'] = array("NAME" => "_____");
Название начинается на "Но" и содержит ещё ровно 2 символа (например, "Нота", "Ножи", "Ноль"):
$GLOBALS['arrFilter'] = array("NAME" => "Но__");
Поиск по строковому свойству "BRAND". Найдет все элементы, у которых бренд начинается на "Sony":
$GLOBALS['arrFilter'] = array("PROPERTY_BRAND" => "Sony%");
Фильтры точного совпадения строк (String equal)
Если нужно найти строку, которая полностью совпадает с заданной, используйте знак равенства "=" перед именем поля. Это работает быстрее, чем LIKE, и гарантирует точное совпадение.
Точное совпадение названия:
$GLOBALS['arrFilter'] = array("=NAME" => "Акция лето 2026");
Точное совпадение символьного кода:
$GLOBALS['arrFilter'] = array("=CODE" => "aktsiya-leto-2026");
Точное совпадение свойства "EMAIL":
$GLOBALS['arrFilter'] = array("=PROPERTY_EMAIL" => "test@example.com");
Точное совпадение внешнего кода (XML_ID):
$GLOBALS['arrFilter'] = array("=XML_ID" => "import_article_1453");
Точное совпадение по свойству-списку. Допустим, у свойства "COLOR" есть вариант "Red" с XML_ID = "red":
$GLOBALS['arrFilter'] = array("=PROPERTY_COLOR_VALUE" => "Red");
Числовые фильтры (Number)
Для чисел работают операторы сравнения: >, <, >=, <=, != и точное совпадение.
Товары дороже 1000 рублей (свойство "PRICE"):
$GLOBALS['arrFilter'] = array(">PROPERTY_PRICE" => 1000);
Товары дешевле или равно 500 рублей:
$GLOBALS['arrFilter'] = array("<=PROPERTY_PRICE" => 500);
Товары в ценовом диапазоне от 1000 до 5000 рублей ("между" двумя значениями):
$GLOBALS['arrFilter'] = array(
">=PROPERTY_PRICE" => 1000,
"<=PROPERTY_PRICE" => 5000
);
Еще пример: элементы, созданные строго между двумя датами (эта запись выведет новости, опубликованные с 1 января по 1 марта 2026):
$GLOBALS['arrFilter'] = array(
">DATE_ACTIVE_FROM" => "01.01.2026",
" "01.03.2026"
);
Обратите внимание: если использовать строгие неравенства ">" и "<", граничные даты исключаются из выборки. Нестрогие ">=" и "<=" включают их. Выбирайте под свой сценарий.
Товары с ценой не равной 999:
$GLOBALS['arrFilter'] = array("!=PROPERTY_PRICE" => 999);
Элементы с количеством (свойство "QUANTITY") больше нуля:
$GLOBALS['arrFilter'] = array(">PROPERTY_QUANTITY" => 0);
Числовое поле элемента - сортировка больше или равна 100:
$GLOBALS['arrFilter'] = array(">=SORT" => 100);
ID элемента больше 50:
$GLOBALS['arrFilter'] = array(">ID" => 50);
Фильтры по свойствам
Отфильтровываем элементы, у которых в свойстве "HIT" установлено значение "Yes". При этом "HIT" - это список с несколькими значениями, а ID этого свойства - 15:
$GLOBALS['arrFilter'] = array("PROPERTY_15_VALUE" => "Yes");
То же самое, но с обращением по коду свойства:
$GLOBALS['arrFilter'] = array("PROPERTY_HIT_VALUE" => "Yes");
Свойство "COLOR" не пустое:
$GLOBALS['arrFilter'] = array("!PROPERTY_COLOR" => false);
Свойство "DISCOUNT" равно 0 или пустое (т.е. товары без скидки):
$GLOBALS['arrFilter'] = array("PROPERTY_DISCOUNT" => false);
Множественное свойство "TAGS" содержит хотя бы одно из значений:
$GLOBALS['arrFilter'] = array("PROPERTY_TAGS_VALUE" => array("новинка", "хит", "акция"));
Комбинированные фильтры (на реальном примере)
Допустим, нужно вывести активные товары из раздела "Акции" (ID = 45), цена которых от 1000 до 3000 рублей, с ненулевым остатком, отсортировать по цене по возрастанию и показать не больше 5 штук:
$arrFilter = [
"ACTIVE" => "Y",
"SECTION_ID" => 45,
">=PROPERTY_PRICE" => 1000,
"<=PROPERTY_PRICE" => 3000,
">PROPERTY_QUANTITY" => 0
];
// В компоненте это будет выглядеть так:
$APPLICATION->IncludeComponent(
"bitrix:catalog.top",
"",
[
"IBLOCK_ID" => 7,
"USE_FILTER" => "Y",
"FILTER_NAME" => "arrFilter",
"ELEMENT_COUNT" => 5,
"SORT_BY1" => "PROPERTY_PRICE",
"SORT_ORDER1" => "ASC",
"CACHE_TYPE" => "A",
"CACHE_TIME" => 3600
]
);
А вот так можно вывести новости из определенного раздела за последнюю неделю, исключая элемент с ID = 99:
$arrFilter = [
"ACTIVE" => "Y",
"SECTION_ID" => 12,
"!ID" => 99,
">=DATE_ACTIVE_FROM" => date('d.m.Y', strtotime('-7 days'))
];