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

Класс Dialog

Основной класс для добавления в диалог элементов, вкладок и футера.

Метод Описание С версии
static getSelectedItems(array $ids, array $options = []): ItemCollection Статический метод, возвращающий коллекцию элементов (объект класса ItemCollection) по заданными идентификаторам.
  • $ids — массив идентификаторов, каждый элемент которого представляет собой массив из двух элементов ['entityId', 'elementId'].
  • $options — массив опций сущностей. Каждый элемент массива представляет собой массив вида:
    [
    	'id' => 'entityId', // идентификатор сущности
    	'options' => [] // опции сущности
    ]
    

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

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

Данный метод обычно используют, чтобы заранее выбрать данные элементов на бэкенде и прокинуть их в JavaScript.

$preselectedItems = [
	['user', 1],
	['department', 1],
	['user', 7],
	['project', 2],
	['department', '2:F'],
	['meta-user', 'all-users'],
	['user', 27],
];

$options = [
	['id' => 'user', 'options' => ['nameTemplate' => '#LAST_NAME#']]
];


$items = \Bitrix\UI\EntitySelector\Dialog::getItems($preselectedItems, $options);
$selectedItems = $items->toJsObject();

<script>
const tagSelector = new TagSelector({
	dialogOptions: {
		context: 'MY_MODULE_CONTEXT',
		selectedItems: ,
		entities: [
			{
				id: 'user', // пользователи
			},
			{
				id: 'project', // группы и проекты
			},
			{
				id: 'department', // структура компании
				options: {
					selectMode: 'usersAndDepartments' // выбор пользователей и отделов
				}
			},
			{
				id: 'meta-user',
				options: {
					'all-users': true // Все сотрудники
				}
			},
		],
	}
});

tagSelector.renderTo(document.getElementById('container'));

static getItems(array $ids, array $options = []): ItemCollection Статический метод, возвращающий коллекцию элементов (объект класса ItemCollection) по заданными идентификаторам.
  • $ids — массив идентификаторов, каждый элемент которого представляет собой массив из двух элементов ['entityId', 'elementId'].
  • $options — массив опций сущностей. Каждый элемент массива представляет собой массив вида:

    [
    	'id' => 'entityId', // идентификатор сущности
    	'options' => [] // опции сущности
    ]
    

    Данный метод обычно используют, чтобы заранее выбрать данные элементов на бэкенде и прокинуть их в JavaScript.

getId(): ?string Возвращает идентификатор диалога.
getContext(): ?string Возвращает идентификатор контекста.
getCurrentUserId(): int Возвращает идентификатор текущего пользователя.
addItem(Item $item) Добавляет элемент в диалог.
  • $item — добавляемый элемент (объект класса Item).

public function fillDialog(Dialog $dialog): void
{
	$dialog->addTab(new Tab([
		'id' => 'my-tab',
		'title' => 'Мой таб',
		'stub' => true,
		'icon' => [
			'default' => '/path/to/tab-icon.svg',
			'selected' => '/path/to/tab-icon-selected.svg'
		]
	]));
    
	$dialog->addItem(
		new Item([
			'id' => 1000,
			'entityId' => 'my-entity-id',
			'tabs' => 'my-tab',
			'title' => 'Мой элемент',
			'avatar' => '/path/to/avatar.jpg',
			'customData' => [
				'myOption' => true,
			],
		])
	);
}

addItems(array $items) Добавляет элементы в диалог.
  • $items — массив добавляемых элементов (объекты класса Item).
addRecentItem(Item $item) Добавляет элемент на вкладку "Последние".
  • $item — добавляемый элемент (объект класса Item).
addRecentItems(array $items) Добавляет элементы на вкладку "Последние".
  • $items — массив добавляемых элементов (объекты класса Item).

public function fillDialog(Dialog $dialog): void
{
	$dialog->addRecentItems([
		new Item([
			'id' => 1000,
			'entityId' => 'my-entity-id',
			'entityType' => 'active',
			'title' => 'Мой элемент',
			'avatar' => '/path/to/avatar.jpg',
			'customData' => [
				'myOption' => true,
			],
		]),
		new Item([
			'id' => 2000,
			'entityId' => 'my-entity-id',
			'entityType' => 'active',
			'title' => 'Мой элемент 2',
			'avatar' => '/path/to/avatar.jpg',
			'customData' => [
				'myStringOption' => 'kuku',
			],
		])
	]);
}

getRecentItems(): RecentCollection Возвращает коллекцию типа ItemCollection со списком элементов на вкладке "Последние", которые были выбраны в текущем контексте. Данные для коллекции выбираются диалогом автоматически.

public function fillDialog(Dialog $dialog): void
{
	// выберем все элементы моей сущности на вкладке "Последние"
	$recentItems = $dialog->getRecentItems()->getEntityItems('my-entity-id');
	if ($recentItems < 10)
	{
		// если элементов мало, добавим еще.
		$dialog->addRecentItem(new Item([
			'id' => 1000,
			'entityId' => 'my-entity-id',
			'entityType' => 'active',
			'title' => 'Мой элемент',
			'avatar' => '/path/to/avatar.jpg',
			'customData' => [
				'myOption' => true,
			],
		]));
	}
}

getGlobalRecentItems(): RecentCollection Возвращает коллекцию типа ItemCollection со списком элементов на вкладке "Последние", которые были выбраны в глобальном контексте. Данные для коллекции выбираются диалогом автоматически.

public function fillDialog(Dialog $dialog): void
{
	$maxItemsInRecentTab = 30;

	// выберем все элементы моей сущности на вкладке "Последние" для текущего контекста.
	$recentItems = $dialog->getRecentItems()->getEntityItems('my-entity-id');
	if (count($recentItems) < $maxItemsInRecentTab)
	{
		$limit = $maxItemsInRecentTab - count($recentItems);

		// выберем все элементы моей сущности на вкладке "Последние" для глобального контекста.
		$recentGlobalItems = $dialog->getGlobalRecentItems()->getEntityItems('my-entity-id');
		foreach ($recentGlobalItems as $recentGlobalItem)
		{
			if ($limit <= 0)
			{
				break;
            		}

            		if (!isset($recentItems[$recentGlobalItem->getId()]) && $recentGlobalItem->isLoaded())
            		{
				// добавим элементы из глобального контекста на вкладку "Последние".
				$dialog->getRecentItems()->add($recentGlobalItem);
				$limit--;
            		}
		}
	}
}

getItemCollection(): ItemCollection Возвращает коллекцию типа ItemCollection со списком всех добавленных элементов (объекты класса Item) в диалог.
setFooter(string $footer, array $options = []) Устанавливает футер диалога.
  • $footer — футер диалога. Указывается либо верстка, либо полное название JavaScript-класса, который реализует отрисовку футера.
  • $options — дополнительные опции футера.

public function fillDialog(Dialog $dialog): void
{
	$dialog->setFooter('BX.SocialNetwork.EntitySelector.Footer', ['myOption' => true]);
}

getFooter(): ?string Возвращает футер диалога.
getFooterOptions(): ?array Возвращает дополнительные опции футера.
addTab(Tab $tab) Добавляет новую вкладку в диалог.
  • $tab — добавляемая вкладка (объект класса Tab).

public function fillDialog(Dialog $dialog): void
{
	$dialog->addTab(new Tab([
		'id' => 'my-tab',
		'title' => 'Мой таб',
		'stub' => true,
		'icon' => [
			'default' => '/path/to/tab-icon.svg',
			'selected' => '/path/to/tab-icon-selected.svg'
		]
	]));
}

getTabs(): array Возвращает массив вкладок (объекты класса Tab) диалога.
getTab(string $tabId): ?Tab Возвращает объект вкладки по идентификатору.
  • $tabId — идентификатор вкладки.
addEntity(Entity $entity) Добавляет в диалог новую сущность.
  • $entity — новая сущность (объекты класса Entity).
getEntities(): array Возвращает массив сущностей (объекты класса Entity) диалога.
getEntity(string $entityId): ?Entity Возвращает объект сущности по идентификатору.
  • $entityId — идентификатор сущности.

public function fillDialog(Dialog $dialog): void
{
	// если сущность одна в диалоге, то добавим элементы на вкладку "Последние".
	if (count($dialog->getEntities()) === 1)
	{
		$dialog->addRecentItems([
			new Item([
				'id' => 1000,
				'entityId' => 'my-entity-id',
				'entityType' => 'active',
				'title' => 'Мой элемент',
				'avatar' => '/path/to/avatar.jpg',
				'customData' => [
					'myOption' => true,
				],
			]),
			new Item([
			'id' => 2000,
			'entityId' => 'my-entity-id',
			'entityType' => 'active',
			'title' => 'Мой элемент 2',
			'avatar' => '/path/to/avatar.jpg',
				'customData' => [
					'myStringOption' => 'kuku',
				],
			])
		]);
	}
}


© «Битрикс», 2001-2024, «1С-Битрикс», 2024