Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива, инфорблока. Спектр применяемости очень широкий. Используется чаще всего с компонентами: Список новостей, Новости, Элементы раздела, Каталог, Топ элементов каталога и Каталог.
Для включения фильтр достаточно проделать следующее: Перед вызовом компонента вставить код вида
$GLOBALS['Название_Фильтра'] = array(Массив с данными для фильтрации);
В параметрах компонента передать параметры включения фильтра и его название
$APPLICATION->IncludeComponent(
.....
"USE_FILTER" => "Y",
"FILTER_NAME" => "Название_Фильтра",
.....
Дальше идут примеры которые вы можете передать в $GLOBALS['Название_Фильтра'], в качестве "Название_Фильтра" буду вписывать "arrFilter". Данные примеры собраны из нескольких источников. И вы можете писать свои примеры в комментариях, лучшие будут добавлены в тело заметки.
Итак: погнали
Наличие не пустого свойства. Если у инфоблока есть свойство с заданным кодом (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)
Элементы созданные последние два дня, где 86000 это количество секунд. Умножая этот параметр на количество дней, получим элементы за последние n (86000 * 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 это список с несколькими значениями.
$GLOBALS['arrFilter'] = array("=PROPERTY_HIT_VALUE"=> "Yes");
Отфильтровываем элементы у которых в свойстве "HIT" установлено "Yes". При этом HIT это список с несколькими значениями. И э этого свойсва ID - 15
$GLOBALS['arrFilter'] = array("PROPERTY_15_VALUE"=>"Yes");
Отфильтровываем элементы у которых в свойстве "HIT" установлено "Yes". При этом HIT это список с несколькими значениями. И э этого свойсва ID - 15
$GLOBALS['arrFilter'] = array("PROPERTY_15_VALUE"=>"Yes");
Все элементы из раздела инфоблока, зная ID этого раздела. Например из 90-го
$GLOBALS['arrFilter']=array("SECTION_ID" => 90);
Пока все, заметка будет дополняться по ходу жизни. Любые из фильтров можно комбинировать просто добавляя разные условия в массив.
Код |
---|
$GLOBALS['arrFilter']=array("ORDER" => 'RAND'); |

Цитата | ||
---|---|---|
Николай Сухих написал: Как сделать случайную сортировку?
|
Не очень понял, что хотели сделать. Нафильтровать случайных элементов? В фильтре это смысла нет делать, он именно фильтр а не логика отображения. Но если что:
"SORT" => "RAND"
есть bitrix:news / bitrix:news.list
есть разделы, подразделы, элементы.
есть один подраздел, который ACTIVE = N
он не выводится, но если зайти напрямую по ссылке -- то покажет пустой раздел.
Можно ли как-то фильтром, или чем другим, закрыть вывод подраздела по прямой ссылке с ACTIVE = N?
нужна там ошибка 404.

Цитата |
---|
Павел написал: есть один подраздел, который ACTIVE = N он не выводится, но если зайти напрямую по ссылке -- то покажет пустой раздел. Можно ли как-то фильтром, или чем другим, закрыть вывод подраздела по прямой ссылке с ACTIVE = N? нужна там ошибка 404. |
Фильтрами думаю ни как. Из быстрого, что приходит в голову:
можно в шаблоне списка новостей сделать проверку
Код |
---|
if (count($arResult["ITEMS"] == 0)) { CHTTP::SetStatus("404 Not Found"); } |