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

Класс 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.
  • $ids — идентификаторы элементов сущности, к которой относится текущий провайдер.

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

getSelectedItems(array $ids): array Данный абстрактный метод аналогичен методу getItems, но вызывается он для элементов, для которых заранее известно, что они выбраны (опция preselectedItems).

Разницу между getItems и getSelectedItems удобнее всего показать на примере сущности "пользователь". Например, есть запись в блоге, которая адресована нескольким пользователям. При редактировании этой записи пользователи, указанные в поле "Кому", должны быть все отображены, даже если среди них есть уволенные (неактивные). Однако уволенных сотрудников точно не должно быть в списке "Последних" или на вкладке со структурой компании. Метод getSelectedItems вернет данные по уволенным сотрудникам, а getItems — нет.

Если у сущности нет элементов, которые могут иметь разную видимость в зависимости от контекста, реализации getItems и getSelectedItems будут совпадать.

fillDialog(Dialog $dialog): void Данный метод выполняется при динамической загрузке данных диалога. Здесь можно добавить вкладки, элементы, футер или дозаполнить вкладку "Последние".
  • $dialog — объект диалога (класс Dialog).
getChildren(Item $parentItem, Dialog $dialog): void Метод вызывается при загрузке дочерних элементов древовидных сущностей.
  • $parentItem — родительский элемент, для которого необходимо загрузить дочерние элементы. Объект класса Item.
  • $dialog — объект диалога (класс Dialog).
doSearch(SearchQuery $searchQuery, Dialog $dialog): void Метод вызывается при динамическом поиске элементов.
  • $searchQuery — поисковый запрос. Объект класса SearchQuery.
  • $dialog — объект диалога (класс Dialog).
handleBeforeItemSave(Item $item): void Метод вызывается перед сохранением элемента в список "последних". Может использоваться для отмены сохранения.
  • $item — сохраняемый элемент. Объект класса Item.

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.

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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Андрей Шкилев
Сообщение не промодерировано, возможны ошибки и неточности.
Ребята, потратил пару часов :cry:  не понимая почему добавил свой класс провайдера, сделал всё как описано в доке, но почему то его методы не вызывались в частности doSerach. при этом если наследовал от UserProvider то всё работало) оказалось что помимо обязательных методов из базового нужно указать конструктор, в базовом он protected, надо сделать его публичным, только потом провадер отрабатывает как надо.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх