Фильтрация элементов — одна из самых частых задач при работе с инфоблоками в Битрикс. В этой статье разберём, как правильно формировать фильтры для выборки новостей, товаров, статей и других элементов.
Рассмотрим:
-
Базовые фильтры (
CIBlockElement::GetList) -
Фильтрацию по свойствам (чекбоксы, списки, числа)
-
Работу с ценами и количеством
-
Фильтры по изображениям и текстам
-
Сложные условия (
AND,OR) -
Фильтрацию по дате и активности
-
Использование GET-параметров
1. Базовый фильтр через CIBlockElement::GetList
Основной метод выборки элементов — CIBlockElement::GetList.
Пример: Получение активных элементов инфоблока с сортировкой по имени.
$arFilter = array(
"IBLOCK_ID" => 10, // ID инфоблока
"ACTIVE" => "Y", // Только активные
"SECTION_ID" => 5 // Конкретный раздел
);
$arOrder = array("NAME" => "ASC"); // Сортировка по имени (A-Z)
$arSelect = array("ID", "NAME"); // Выбираем только ID и название
$res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
while ($arItem = $res->GetNext()) {
print_r($arItem); // Вывод данных
}2. Фильтрация по свойствам
2.1. Чекбоксы (Да/Нет)
Если свойство имеет тип "Список" с одним значением Y (флажок):
// Выбор элементов с отмеченным чекбоксом
$arFilter = array("PROPERTY_FEATURED_VALUE" => "Y");
// Выбор элементов БЕЗ отметки
$arFilter = array("!PROPERTY_FEATURED_VALUE" => "Y");2.2. Фильтр по нескольким значениям
$arFilter = array(
"PROPERTY_COLOR" => array("red", "blue", "green") // Элементы с красным, синим или зелёным цветом
);3. Фильтрация по ценам и количеству
3.1. Товары с ценой в определённом диапазоне
$minPrice = 1000;
$maxPrice = 5000;
$arFilter = array(
">=CATALOG_PRICE_1" => $minPrice, // Цена типа 1 (например, розничная)
"<=CATALOG_PRICE_1" => $maxPrice
);3.2. Фильтр по наличию на складе
$arFilter = array(">CATALOG_QUANTITY" => 0); // Только товары с положительным остатком4. Фильтрация по изображениям и текстам
4.1. Элементы с заполненной картинкой
// Проверка анонсного изображения
$arFilter = array("!PREVIEW_PICTURE" => false);
// Проверка детального изображения
$arFilter = array("!DETAIL_PICTURE" => false);4.2. Элементы с заполненным описанием
$arFilter = array("!DETAIL_TEXT" => false); // Есть детальное описание5. Сложные условия (AND, OR)
5.1. Фильтр "ИЛИ" (OR)
$arFilter = array(
"LOGIC" => "OR",
"PROPERTY_MATERIAL" => "дерево",
"PROPERTY_MATERIAL" => "металл"
);5.2. Комбинированный фильтр
$arFilter = array(
array(
"LOGIC" => "AND",
">=PROPERTY_PRICE" => 1000,
"<=PROPERTY_PRICE" => 5000
),
array(
"LOGIC" => "OR",
"PROPERTY_COLOR" => "красный",
"PROPERTY_COLOR" => "синий"
)
);6. Фильтрация по дате и активности
6.1. Элементы за последнюю неделю
$arFilter = array(
">=DATE_ACTIVE_FROM" => date("d.m.Y", strtotime("-1 week")),
"<=DATE_ACTIVE_FROM" => date("d.m.Y")
);6.2. Активные элементы с ограниченным сроком
$arFilter = array(
"ACTIVE" => "Y",
"ACTIVE_DATE" => "Y", // Учитывать даты активности
"<=DATE_ACTIVE_TO" => date("d.m.Y") // Показывать, если срок не истёк
);7. Фильтрация через GET-параметры
7.1. Передача параметров из URL
if (!empty($_GET['category'])) {
$arFilter["SECTION_CODE"] = $_GET['category']; // Фильтр по символьному коду раздела
}7.2. Поиск по названию или артикулу
if (!empty($_GET['q'])) {
$arFilter[] = array(
"LOGIC" => "OR",
array("NAME" => "%" . $_GET['q'] . "%"), // Поиск по названию
array("PROPERTY_ARTICLE" => $_GET['q']) // Поиск по артикулу
);
}Заключение
Мы рассмотрели основные способы фильтрации элементов в Битрикс:
-
Простые фильтры (
=,!=,>,<) -
Работу с ценами и количеством
-
Условия
AND/OR -
Фильтрацию по дате и активности
-
Использование GET-параметров
Для более глубокого изучения рекомендую официальную документацию.