Таблица данных (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, настройка фильтра, поиск.