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

Класс 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
Наверх