Блог Горошко Андрея 1C-Битрикс Компонент main.ui.filter: Подключение и обработка фильтра для Грида

Компонент main.ui.filter: Подключение и обработка фильтра для Грида

Средний рейтинг
Еще нет оценок

Таблица данных (main.ui.grid) почти всегда требует фильтрации.

Для этого используется парный компонент bitrix:main.ui.filter.

Он отображает строку поиска и выпадающую панель с условиями, сохраняет пресеты и настройки пользователя.

Шаг 1: Описание полей фильтра

Структура полей похожа на параметры компонента или настройки свойств инфоблока.

$filterId = 'my_custom_grid'; // Должен совпадать с GRID_ID грида!

$filterFields = [
    [
        'id' => 'NAME', 
        'name' => 'Название', 
        'type' => 'string', 
        'default' => true
    ],
    [
        'id' => 'DATE_CREATE', 
        'name' => 'Дата создания', 
        'type' => 'date',
        'default' => true
    ],
    [
        'id' => 'STATUS', 
        'name' => 'Статус', 
        'type' => 'list',
        'items' => [
            'Y' => 'Активен',
            'N' => 'Скрыт'
        ],
        'params' => ['multiple' => 'Y'] // Множественный выбор
    ],
    [
        'id' => 'PRICE',
        'name' => 'Цена',
        'type' => 'number'
    ]
];

Шаг 2: Вывод компонента

Разместите этот код перед вызовом грида.

<?$APPLICATION->IncludeComponent(
    'bitrix:main.ui.filter',
    '',
    [
        'FILTER_ID' => $filterId,
        'GRID_ID' => $filterId,
        'FILTER' => $filterFields,
        'ENABLE_LIVE_SEARCH' => true,
        'ENABLE_LABEL' => true,
    ]
);?>

Шаг 3: Получение значений фильтра (Backend)

Самое интересное — как применить выбранные пользователем условия к запросу данных (getList). Для этого используется класс Bitrix\Main\UI\Filter\Options.

use Bitrix\Main\UI\Filter\Options;

// 1. Получаем настройки фильтра по его ID
$filterOptions = new Options($filterId);

// 2. Получаем текущие данные запроса (логика + массив полей)
$filterData = $filterOptions->getFilter($filterFields);

// 3. Конвертируем в формат ORM getList
$ormFilter = [];

// Обработка поиска (строка "Найти...")
if (!empty($filterData['FIND'])) {
    $ormFilter['%NAME'] = $filterData['FIND'];
}

// Обработка полей
foreach ($filterData as $key => $value) {
    switch ($key) {
        case 'NAME':
            $ormFilter['%NAME'] = $value; 
            break;
        case 'STATUS':
            $ormFilter['=STATUS'] = $value;
            break;
        case 'DATE_CREATE_from':
            $ormFilter['>=DATE_CREATE'] = $value;
            break;
        case 'DATE_CREATE_to':
            $ormFilter['<=DATE_CREATE'] = $value;
            break;
        case 'PRICE_from':
             $ormFilter['>=PRICE'] = $value;
             break;
        // ... и так далее
    }
}

// 4. Передаем $ormFilter в getList
$res = \My\Table::getList(['filter' => $ormFilter, ...]);

Вывод:
Связка main.ui.grid + main.ui.filter позволяет создавать современные, удобные интерфейсы для работы с данными за считанные минуты.

Главная задача разработчика — правильно описать поля и корректно трансформировать полученные от Options::getFilter() данные в формат фильтра ORM.

main.ui.filter, фильтр битрикс, фильтрация грида, Filter\Options, ui.filter, настройка фильтра, поиск.

Мой рейтинг:

Добавить комментарий

Related Post

Правильное использование BB кода в 1С-БитриксПравильное использование BB кода в 1С-Битрикс

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

Сила связей в D7 ORM: JOIN’ы и ReferenceField на практикеСила связей в D7 ORM: JOIN’ы и ReferenceField на практике

Средний рейтинг Еще нет оценок Мы уже умеем выбирать данные из одной таблицы с помощью getList. Но настоящая мощь ORM проявляется, когда нужно в одном запросе получить связанные данные из нескольких

Управление выводом в Битрикс: Буферизация контента и RestartBufferУправление выводом в Битрикс: Буферизация контента и RestartBuffer

Средний рейтинг Еще нет оценок Весь HTML-код, который генерируется на странице Битрикс, не отправляется в браузер сразу. Он накапливается в специальном буфере вывода. Только после того, как отработает эпилог (epilog_after.php), Битрикс