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

Класс 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.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024