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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

от 300 000 руб. от 2-х недель

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

Инфоресурс

от 300 000 руб. от 4-х недель

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

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.