Фильтры в 1С-Битрткс на всякие случаи жизни

Просмотров: 69528

Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива, инфорблока. Спектр применяемости очень широкий. Используется чаще всего с компонентами: Список новостей, Новости, Элементы раздела, Каталог, Топ элементов каталога и Каталог.

Для включения фильтра достаточно проделать следующее: перед вызовом компонента вставить код вида

$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);

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 6-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.