Класс 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 . |