Фильтрация в каталоге 1С-Битрикс

В компонентах bitrix:catalog.section и bitrix:news.list есть параметр FILTER_NAME, который указывает имя глобальной переменной (массива), содержащей условия фильтрации элементов или новостей.

Фильтрация в каталоге 1С-Битрикс

1. Общая концепция фильтра в 1С-Битрикс

В компонентах bitrix:catalog.section и bitrix:news.list есть параметр FILTER_NAME. Он указывает имя переменной (массива) в глобальном пространстве, которую компонент будет использовать для фильтрации элементов или новостей. Обычно эта переменная задаётся в виде:

<?php
$GLOBALS[$FILTER_NAME] = [];
?>

Затем внутри массива указываются нужные условия фильтрации, соответствующие полям информационного блока, свойствам элементов, а также параметрам торгового каталога (например, цена).

2. Как это работает

  1. В параметрах компонента задаём:

    "FILTER_NAME" => "arrFilter",

    где arrFilter — это имя переменной, в которой будет храниться массив с условиями фильтрации.

  2. В коде (который выводит компонент) определяем саму переменную:

    <?php
    global $arrFilter;
    $arrFilter = []; // Здесь будет логика наших условий
    ?>
            
  3. Внутри массива $arrFilter указываем параметры фильтрации. Варианты полей, по которым можно фильтровать, рассмотрим далее.

3. По каким полям можно фильтровать

3.1. Стандартные поля элементов инфоблока

Наиболее часто используемые стандартные поля:

  • ID — идентификатор элемента.
  • NAME — название элемента.
  • ACTIVE — активность элемента ("Y" / "N").
  • SECTION_ID — идентификатор раздела.
  • SECTION_CODE — символьный код раздела.
  • IBLOCK_ID — идентификатор инфоблока.
  • DATE_ACTIVE_FROM — дата начала активности.
  • DATE_ACTIVE_TO — дата окончания активности.
  • TIMESTAMP_X — время изменения.
  • и т.д.

Пример фильтра по идентификатору элемента и активности:

<?php
global $arrFilter;
$arrFilter = [
    "ID"     => 123,   // конкретный элемент
    "ACTIVE" => "Y",    // активные элементы
];
?>

Результат: компонент покажет только элемент с ID = 123, при условии, что он активен.

3.2. Свойства элементов (PROPERTY_)

Для фильтрации по свойствам инфоблока используются ключи вида PROPERTY_КОД_СВОЙСТВА:

  • PROPERTY_COLOR — фильтр по цвету.
  • PROPERTY_SIZE — фильтр по размеру.
  • PROPERTY_BRAND — фильтр по бренду.

Допустим, нам нужно отфильтровать элементы, у которых свойство COLOR = "Красный" и SIZE = "42". Тогда фильтр будет выглядеть так:

<?php
global $arrFilter;
$arrFilter = [
    "PROPERTY_COLOR" => "Красный",
    "PROPERTY_SIZE"  => "42",
];
?>

Результат: компонент покажет все элементы, соответствующие выбранному цвету и размеру.

Если требуется выбрать несколько значений свойства, можно передать массив:

$arrFilter = [
    "PROPERTY_COLOR" => ["Красный", "Зелёный"]
];

Результат: в выборку попадут элементы, у которых цвет либо Красный, либо Зелёный.

Сложные условия

Можно задавать логику с операторами (больше, меньше, не равно и т.п.). Для этого используется дополнительный синтаксис ключей:

  • !=PROPERTY_COLOR — свойство не равно значению.
  • >=PROPERTY_SIZE — свойство больше либо равно значению.
  • и т.д.

Например:

$arrFilter = [
    ">=PROPERTY_PRICE" => 1000,  // свойство PRICE больше или равно 1000
    "<=PROPERTY_PRICE" => 5000   // при этом меньше или равно 5000
];

Результат: компонент покажет товары, у которых свойство "PRICE" попадает в диапазон от 1000 до 5000.

3.3. Параметры торгового каталога

Если у вас установлен модуль Торговый каталог и элементы инфоблока являются товарами с ценами, то можно фильтровать по ценам и остаткам на складах. Основные возможности:

  1. Фильтр по ценам

    Например, если у вас есть тип цены с ID = 1 (часто это базовая цена, CATALOG_PRICE_1), можно выбрать товары в определённом ценовом диапазоне:

    $arrFilter = [
        ">=CATALOG_PRICE_1" => 1000,
        "<=CATALOG_PRICE_1" => 3000
    ];
    

    Результат: выводятся товары, у которых базовая цена от 1000 до 3000.

  2. Фильтр по наличию (остаткам)

    Для фильтра по остатку используется поле CATALOG_QUANTITY:

    $arrFilter = [
        ">CATALOG_QUANTITY" => 0
    ];
    

    Результат: отображаются только товары с положительным остатком (больше 0).

  3. Фильтр по типам цен

    Если в магазине несколько типов цен, например, оптовая цена с ID = 2, то можно фильтровать по оптовой цене:

    $arrFilter = [
        ">=CATALOG_PRICE_2" => 200,
        "<=CATALOG_PRICE_2" => 1500
    ];
    

4. Примеры использования

Ниже несколько типовых примеров, которые помогают понять комбинацию условий.

4.1. Фильтр по нескольким условиям

<?php
global $arrFilter;
$arrFilter = [
    "ACTIVE"           => "Y",         // элементы должны быть активны
    "SECTION_ID"       => 10,          // из раздела с ID=10
    ">=CATALOG_PRICE_1" => 1000,     // базовая цена от 1000
    "<=CATALOG_PRICE_1" => 5000,     // до 5000
    "PROPERTY_COLOR"   => "Синий",     // свойство цвет - синий
];
?>

Результат: в компонент попадут только синие товары из раздела 10, у которых базовая цена в диапазоне 1000–5000 рублей и статус активен.

4.2. Фильтрация по нескольким свойствам (сложные условия)

Предположим, нужно вывести все товары, у которых цена от 500 до 3000, либо указанное свойство SALE равно Y. Обычно при передаче в $arrFilter все условия работают как И (логическое И). Если нужен сложный сценарий (с логикой ИЛИ), применяется расширенный функционал Bitrix — CBitrixComponent::applyFilter или отдельные инструменты, где фильтр формируется вручную с использованием логических групп. Однако простой пример с И-логикой:

$arrFilter = [
    "LOGIC" => "OR",
    [
        ">=CATALOG_PRICE_1" => 500,
        "<=CATALOG_PRICE_1" => 3000,
    ],
    [
        "PROPERTY_SALE" => "Y",
    ],
];

Обратите внимание, что при использовании "LOGIC" => "OR" мы можем группировать условия таким образом, чтобы одно из них было выполнено. В результате попадут либо товары с ценой 500–3000, либо товары, у которых свойство SALE = Y.

5. Резюме

  • Параметр FILTER_NAME в компонентах bitrix:catalog.section и bitrix:news.list указывает на глобальную переменную, в которой хранится массив условий.
  • Фильтрация может производиться как по стандартным полям инфоблока (ID, NAME, SECTION_ID и т.д.), так и по свойствам (PROPERTY_*).
  • Если установлен модуль Торговый каталог, доступны дополнительные возможности: фильтрация по ценам (CATALOG_PRICE_*), остаткам (CATALOG_QUANTITY) и типам цен.
  • Фильтр может содержать сложные условия с логикой И/ИЛИ, используя группы условий (LOGIC => "AND" / "OR").
  • Результат фильтрации — это набор элементов, соответствующих заданным критериям.

Данный механизм даёт гибкие возможности управления выборкой элементов и используется практически во всех проектах на Битрикс, где есть каталоги, новости и любой другой контент, хранящийся в инфоблоках.

Теги:  Битрикс, рецепты

Интернет-магазин от 120 000 руб., срок от 4 недель

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

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

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