Документация для разработчиков
Темная тема

Фильтр (main.ui.filter)

Описание

Компонент main.ui.filter(классы Bitrix\Main\UI\Filter) выводит фильтр + поиск. Является системным компонентом.

В физической структуре его можно найти в папке /bitrix/components/bitrix/main.ui.filter.

Параметры

ПараметрТипОписание
FILTER_IDstringИдентификатор фильтра (должен быть уникальным).
GRID_IDstringИдентификатор грида. Укажите если планируете использовать фильтр вместе с гридом. Если указан, то фильтр будет самостоятельно обновлять грид при фильтрации.
FILTERarrayМассив с полями. Доступны следующие типы полей для фильтрации:
  1. string - строка (для полей типа "строка" тип можно не указывать);
  2. list - список с одиночным или множественным выбором;
  3. number - число (точное число, диапазон, больше/меньше чем);
  4. date - выбор заранее определенных значений из списка (“точная дата”, “диапазон”, “последние N дней” и т. п);
  5. custom_date - произвольная дата (выбор число/месяц/год);
  6. checkbox - список с предустановленными значениями: “Да”, “Нет” и “Не выбрано”;
  7. custom_entity - реализует пользовательский и программный интерфейс для взаимодействия с данными вне фильтра (напр.: выбор сущности CRM, выбор группы, пользователя и т. п.
  8. entity_selector - реализует интерфейс выбора элементов через EntitySelector: диалог выбора сущностей. Доступен с версии main 21.200.0.
  9. dest_selector - окно для выбора пользователей (по умолчанию). Можно также фильтровать по сущностям CRM, по отделам (uf_department), по структуре, по рабочим группам. Полный список параметров
ENABLE_LABELboolВключает отображение заголовков полей фильтра.
ENABLE_LIVE_SEARCHboolВключает “живую фильтрацию” по мере ввода в поисковую строку.
FILTER_PRESETSarrayПресеты фильтра.
ENABLE_FIELDS_SEARCHbool Включает возможность фильтрации по названию поля.
HEADERS_SECTIONSarrayМассив для группировки полей в main.ui.filter вида:
array (
 0 =>
 array (
    'id' => 'DEAL',
   'name' => 'Мое название',
   'default' => true, - в эту секцию скидываем все поля, у которых явно не задана привязка к секции
   'selected' => true, - секция показывается по умолчанию
 ),
 1 =>
 array (
   'id' => 'CONTACT',
   'name' => 'Контакт',
   'selected' => true,
 ),
 2 =>
 array (
   'id' => 'COMPANY',
   'name' => 'Компания',
   'selected' => true,
 ),
)
DISABLE_SEARCHboolОтключение полнотекстового поиска.

Пример вызова

<?$APPLICATION->IncludeComponent(
'bitrix:main.ui.filter',
	'',
	[ 
		'FILTER_ID' => 'report_list', 
		'GRID_ID' => 'report_list', 
		'FILTER' => [ 
			['id' => 'DATE', 'name' => 'Дата', 'type' => 'date'], 
			['id' => 'IS_SPEND', 'name' => 'Тип операции',
			'type' => 'list',
			'items' => ['' => 'Любой', 'P' => 'Поступление', 'M' => 'Списание'],
			'params' => ['multiple' => 'Y']
			],
			['id' => 'AMOUNT', 'name' => 'Сумма', 'type' => 'number'], 
			['id' => 'PAYER_INN', 'name' => 'ИНН Плательщика', 'type' => 'number'], 
			['id' => 'PAYER_NAME', 'name' => 'Плательщик'], 
		], 
		'ENABLE_LIVE_SEARCH' => true, 
		'ENABLE_LABEL' => true
	]
);?>

Пресеты

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

"FILTER_PRESETS" => [
	"myPresetId" => [
		"name" => 'Название пресета',
		"default" => 'true', // если true - пресет по умолчанию
		"fields" => [
			"FIELD_1_ID" => "field_1_value",
			"FIELD_2_ID" => "field_2_value",
		]
	]
]

Особенности работы с некоторыми типами полей

Тип list - список.

Списки могут быть с одиночным и множественным выбором, по умолчанию используется одиночный выбор. Имеет следующие дополнительные свойства:

Ключ ТипЗначение по умолчаниюОписание
paramsarrayarray("multiple" => "N")Определяет параметры списка. Может содержать свойство multiple со значением "Y"|"N", свойство определяет будет ли список множественным.
items arrayarray("Не указано")Ассоциативный массив определяющий элементы списка.
// Пример 1. Список с одиночным выбором
array(
	"id" => "MARK",
	"name" => "Оценка",
	"type" => "list",
	"items" => array(
		"P" => "Положительная",
		"N" => "Отрицательная",
	)
)

// Пример 2. Список с множественным выбором.
array(
	"id" => "PARAMS",
	"name" => "Параметры задачи",
	"type" => "list",
	"params" => array(
		"multiple" => "Y",
		),
	"items" => array(
		"MARKED" => "Оценены",
		"IN_REPORT" => "В отчете",
		"OVERDUED" => "Завершены не в срок",
		"ANY_TASK" => "Показать задачи, в которых я не участвую",
	)
)

Поле типа date

Поля типа дата могут поддерживать несколько типов значений объявленных в \Bitrix\Main\UI\Filter\DateType. Например, “точная дата”, “диапазон”, “последние N дней” и т. п. Для исключения значений:
array(
	"id" => "DATE_START",
	"name" => "Дата начала",
	"type" => "date",
	"exclude" => array(
		\Bitrix\Main\UI\Filter\DateType::LAST_7_DAYS,
		\Bitrix\Main\UI\Filter\DateType::LAST_30_DAYS,
		\Bitrix\Main\UI\Filter\DateType::LAST_60_DAYS,
		\Bitrix\Main\UI\Filter\DateType::LAST_90_DAYS
	)
)
Для включения поддержки времени используйте свойство time:
array(
	"id" => "DATE_START",
	"name" => "Дата начала",
	"type" => "date",
	"time" => true
)

Тип custom_entity

Реализует пользовательский и программный интерфейс для взаимодействия с данными вне фильтра. Например выбор сущности CRM, выбор группы, пользователя и т. п.
КлючТипЗначение по умолчаниюОписание
valueTypestring" "Определяет тип возвращаемого значения. Может принимать значение "numeric" или пустую строку. Если указано "numeric" то в качестве значения будет возвращаться 1/0, если не указано или казано значение отличное от "numeric" то будет возвращаться Y/N
paramsarrayarray("multiple" => "N")Определяет параметры поля. Может содержать свойство multiple со значением "Y"/"N", свойство определяет будет ли поддержка множественного выбора.

Пример работы:

// Добавляем поле в фильтр
array(
	"id" => "CREATED_BY",
	"name" => "Постановщик",
	"type" => "custom_entity"
)

// Создаем обработчики событий
BX.addCustomEvent('BX.Main.Filter:customEntityFocus', onFieldFocus);
BX.addCustomEvent('BX.Main.Filter:customEntityBlur', onFieldBlur);

function onFieldFocus(Field) {
	// Устанавливаем ссылку на контейнер окна
	// BX.Main.ui.CustomEntity.setPopupContainer(container)
	// Показываем всплывающее окно
}

function onFieldBlur() {
	// Скрываем окно
}

Диалог выбора сущностей. Тип entity_selector

Примечание: С версии 21.200.0 Главного модуля (main) в компонент main.ui.filter добавлена поддержка диалога выбора сущностей.


Реализует интерфейс выбора элементов через EntitySelector: диалог выбора сущностей.

В качестве базового поля использует описанный выше тип custom_entity. Пользовательский интерфейс реализован как текстовое поле с вставляемыми в него значениями.

При фокусе на поле ввода будет показан диалог выбора сущностей с возможностью поиска по вводимому тексту.

КлючТипОбязательноеЗначение по умолчаниюОписание
multipleBoolНетarray('multiple' => 'N')Принимает значения 'Y'|'N'. Определяет будет ли выбор сущностей множественным.
addEntityIdToResultBoolНетarray('addEntityIdToResult' => 'N')Принимает значения 'Y'|'N'. Определяет, необходимо ли добавлять идентификатор типа сущности к формируемому значению.
dialogOptionsArrayНет - Ассоциативный массив определяющий настройки диалога выбора сущностей.

При addEntityIdToResult=Y выбранное значение будет сформировано в виде массива в JSON формате. Массив содержит два элемента:

  • идентификатор типа сущности;
  • идентификатор самой сущности (по аналогии с ItemId у EntitySelector).

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


Структура массива dialogOptions соответствует полям объекта DialogOptions диалога выбора сущностей. Соответственно поддерживаются и динамические и статические списки элементов.


Примеры


Пример 1. Выбор пользователя

$field = [
	'id' => 'USER_ID',
	'name' => 'Пользователь',
	'type' => 'entity_selector',
	'params' => [
		'multiple' => 'Y',
		'dialogOptions' => [
			'height' => 240,
			'context' => 'filter',
			'entities' => [
				[
					'id' => 'user',
					'options' => [
						'inviteEmployeeLink' => false
					],
				],
				[
					'id' => 'department',
				]
			]
		],
	],
];

Пример 2. Выбор из статического списка

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

$field = [
	'id' => 'STUFF',
	'name' => 'Всякое разное',
	'type' => 'entity_selector',
	'params' => [
		'multiple' => 'N',
		'addEntityIdToResult' => 'Y',
		'dialogOptions' => [
			'items' => [
				[ 'id' => 1, 'entityId' => 'my-entity', 'title' => 'Пункт A', 'tabs' => 'my-tab' ],
				[ 'id' => 2, 'entityId' => 'my-entity', 'title' => 'Пункт B', 'tabs' => 'my-tab' ],
				[ 'id' => 3, 'entityId' => 'my-entity', 'title' => 'Пункт C', 'tabs' => 'my-tab' ],
				[ 'id' => 1, 'entityId' => 'my-user', 'title' => 'Иван Иванов', 'tabs' => 'my-tab' ],
				[ 'id' => 2, 'entityId' => 'my-user', 'title' => 'Константин Константинопольский', 'tabs' => 'my-tab' ],
				[ 'id' => 'USD', 'entityId' => 'my-currency', 'title' => 'Американский Доллар', 'tabs' => 'my-tab' ],
			],
			'tabs' => [
				[ 'id' => 'my-tab', 'title' => 'Моя вкладка' ]
			],
			'showAvatars' => false,
		]
	],
];


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Иван Альков
Сообщение не промодерировано, возможны ошибки и неточности.
А что если нужно заранее установить выбранные элементы фильтра?

Например используем type "entity_selector", типо user

Как передать id пользователя, чтобы он сразу в фильтре был?
3
Георгий Иванов
Сообщение не промодерировано, возможны ошибки и неточности.
Если нужно добавить в фильтр товары/
Код
$APPLICATION->IncludeComponent(
    'bitrix:main.ui.filter',
    '',
    [
        'FILTER_ID' => 'report_list',
        'GRID_ID' => 'report_list',
        'FILTER' => [
            ['id' => 'DATE', 'name' => 'Дата', 'type' => 'date'],
            [
                'id' => 'IS_SPEND', 
                'name' => 'Тип операции',
                'type' => 'list',
                'items' => ['' => 'Любой', 'P' => 'Поступление', 'M' => 'Списание'],
                'params' => ['multiple' => 'Y']
            ],
            ['id' => 'AMOUNT', 'name' => 'Сумма', 'type' => 'number'],
            ['id' => 'PAYER_INN', 'name' => 'ИНН Плательщика', 'type' => 'number'],
            ['id' => 'PAYER_NAME', 'name' => 'Плательщик'],
            [
                'id' => 'PRODUCT_ROW_PRODUCT_ID',
                'name' => 'Товар',
                'type' => 'entity_selector',
                'params' => [
                  'multiple' => 'N',
                  'dialogOptions' => [
                    'height' => 200,
                    'context' => 'catalog-products',
                    'entities' => [
                      0 => [
                        'id' => 'product',
                        'options' => [
                          'iblockId' => 15,
                          'basePriceId' => 1,
                        ],
                      ],
                    ],
                  ],
                ],
            ]
        ],
        'ENABLE_LIVE_SEARCH' => true,
        'ENABLE_LABEL' => true
    ]
);


0
Александр Груздев
Сообщение не промодерировано, возможны ошибки и неточности.
Для того, что бы фильтер отображался в списке по умолчанию используется параметр default = true
Код
[
    'id' => 'ACTIVE_TO',
    'name' => 'Срок действия',
    'type' => 'date',
    'default' => true,
],
1
Георгий Иванов
Сообщение не промодерировано, возможны ошибки и неточности.
При разработке своего компонента, с добавлением  FILTER_PRESETS.
Фильтр находится в таблице b_user_option. Категория main.interface.grid

© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх