Для включения фильтра достаточно проделать следующее: перед вызовом компонента вставить код вида
$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));
Элементы, созданные за текущий день:
$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);
Отфильтровываем элементы, у которых в свойстве "HIT" установлено значение "Yes". При этом "HIT" — это список с несколькими значениями, а ID этого свойства — 15:
$GLOBALS['arrFilter'] = array("PROPERTY_15_VALUE" => "Yes");
Все элементы из раздела инфоблока по ID этого раздела. Например, из 90-го:
$GLOBALS['arrFilter'] = array("SECTION_ID" => 90);