Класс BaseProvider
Описание
Bitrix\UI\EntitySelector\BaseProvider
— абстрактный класс, от которого должны наследоваться все провайдеры данных.
abstract class BaseProvider { protected function __construct() { } public abstract function isAvailable(): bool; public abstract function getItems(array $ids): array; public abstract function getSelectedItems(array $ids): array; public function fillDialog(Dialog $dialog): void { } public function getChildren(Item $parentItem, Dialog $dialog): void { } public function doSearch(SearchQuery $searchQuery, Dialog $dialog): void { } public function handleBeforeItemSave(Item $item): void { } public function getOption(string $option, $defaultValue = null) { } }
Конструктор
__construct(array $options = [])
Конструктор класса.
$options
— массив произвольных опций провайдера, которые задаются при создании диалога в JavaScript.
Данный метод обычно используется для проверки корректности входных опций и для заполнения внутренней коллекции $this->options
. Используйте метод getOption для получения установленных опций.
class MyProvider extends \Bitrix\UI\EntitySelector\BaseProvider { public function __construct(array $options = []) { parent::__construct(); $this->options['myOption'] = true; if (isset($options['myOption']) && is_bool($options['myOption'])) { $this->options['myOption'] = $options['myOption']; } } }
Методы
Метод | Описание | С версии |
---|---|---|
isAvailable(): bool | Абстрактный метод. Возвращает true , если провайдер данных доступен для использования. Обычно в этом методе проверяют права доступа текущего пользователя.
class MyProvider extends \Bitrix\UI\EntitySelector\BaseProvider { public function isAvailable(): bool { return $GLOBALS['USER']->isAuthorized(); } } | |
getItems(array $ids): array | Абстрактный метод, который получает массив идентификаторов элементов и должен вернуть массив объектов Item.
При получении данных следует учитывать права доступа текущего пользователя. Выходной массив должен содержать только те элементы, к которым текущий пользователь имеет доступ. | |
getSelectedItems(array $ids): array | Данный абстрактный метод аналогичен методу getItems, но вызывается он для элементов, для которых заранее известно, что они выбраны (опция preselectedItems).
Разницу между getItems и getSelectedItems удобнее всего показать на примере сущности "пользователь". Например, есть запись в блоге, которая адресована нескольким пользователям. При редактировании этой записи пользователи, указанные в поле "Кому", должны быть все отображены, даже если среди них есть уволенные (неактивные). Однако уволенных сотрудников точно не должно быть в списке "Последних" или на вкладке со структурой компании. Метод getSelectedItems вернет данные по уволенным сотрудникам, а getItems — нет. Если у сущности нет элементов, которые могут иметь разную видимость в зависимости от контекста, реализации getItems и getSelectedItems будут совпадать. | |
fillDialog(Dialog $dialog): void | Данный метод выполняется при динамической загрузке данных диалога. Здесь можно добавить вкладки, элементы, футер или дозаполнить вкладку "Последние".
| |
getChildren(Item $parentItem, Dialog $dialog): void | Метод вызывается при загрузке дочерних элементов древовидных сущностей. | |
doSearch(SearchQuery $searchQuery, Dialog $dialog): void | Метод вызывается при динамическом поиске элементов.
| |
handleBeforeItemSave(Item $item): void | Метод вызывается перед сохранением элемента в список "последних". Может использоваться для отмены сохранения.
class MyProvider extends \Bitrix\UI\EntitySelector\BaseProvider { public function handleBeforeItemSave(Item $item): void { if ($item->getEntityType() === 'email') { // Отменяем сохранение $item->setSaveable(false); } elseif ($item->getEntityType() === 'another') { // выполняем другие операции } } } | |
getOption(string $option, $defaultValue = null) | Возвращает значение опции $option . Если опция не задана, вернет значение по умолчанию $defaultValue . |
Сообщение не промодерировано, возможны ошибки и неточности.
|
Ребята, потратил пару часов не понимая почему добавил свой класс провайдера, сделал всё как описано в доке, но почему то его методы не вызывались в частности doSerach. при этом если наследовал от UserProvider то всё работало) оказалось что помимо обязательных методов из базового нужно указать конструктор, в базовом он protected, надо сделать его публичным, только потом провадер отрабатывает как надо.
|
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.