Класс Dialog
Основной класс для добавления в диалог элементов, вкладок и футера.
Метод | Описание | С версии |
---|---|---|
static getSelectedItems(array $ids, array $options = []): ItemCollection | Статический метод, возвращающий коллекцию элементов (объект класса ItemCollection) по заданными идентификаторам.
Разницу между 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: =$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) по заданными идентификаторам.
| |
getId(): ?string | Возвращает идентификатор диалога. | |
getContext(): ?string | Возвращает идентификатор контекста. | |
getCurrentUserId(): int | Возвращает идентификатор текущего пользователя. | |
addItem(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) | Добавляет элементы в диалог.
| |
addRecentItem(Item $item) | Добавляет элемент на вкладку "Последние".
| |
addRecentItems(array $items) | Добавляет элементы на вкладку "Последние".
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 = []) | Устанавливает футер диалога.
public function fillDialog(Dialog $dialog): void { $dialog->setFooter('BX.SocialNetwork.EntitySelector.Footer', ['myOption' => true]); } | |
getFooter(): ?string | Возвращает футер диалога. | |
getFooterOptions(): ?array | Возвращает дополнительные опции футера. | |
addTab(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 | Возвращает объект вкладки по идентификатору.
| |
addEntity(Entity $entity) | Добавляет в диалог новую сущность.
| |
getEntities(): array | Возвращает массив сущностей (объекты класса Entity) диалога. | |
getEntity(string $entityId): ?Entity | Возвращает объект сущности по идентификатору.
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', ], ]) ]); } } |