Как добавить вкладку в CRM Bitrix24
Функционал модуля CRM Bitrix24 предоставляет широкие возможности для управления вашим бизнесом. Но в ряде случаев, в силу специфики и разнообразия рабочих процессов организаций, этого функционала недостаточно и приходится разрабатывать дополнительные компоненты. В этой статье мы рассмотрим один из способов отображения вашего функционала в интерфейсе CRM сущностей.
Как вы уже могли понять, речь пойдёт о добавлении собственных табов в элементах crm (лидах, сделках, контактах, компаниях и т.д). Разрабатываемый компонент будет предоставлять механизм управления этими вкладками, т.е. позволит определять логику отображения функционала в зависимости от условий (например прав доступа). Сперва определимся с решаемой задачей.
Требуется отобразить компонент списка сотрудников (сам компонент возьмём из статьи про создание списков b24) в crm сделках. Отображать компонент нужно только пользователям с правами на редактирование выбранной сделки. При создании сделки вкладка должна быть заблокирована.

Понятное дело, что для добавления своих вкладок в интерфейс выносить шаблон компонента или, тем более, компонент — избыточно. В модуле CRM есть штатное событие onEntityDetailsTabsInitialized. Это событие происходит в компоненте bitrix:crm.entity.details (именно этот компонент отвечает за отображение элементов crm) при получении массива отображаемых вкладок.
/**
* file path: bitrix/components/bitrix/crm.entity.details/class.php
*/
public function executeComponent()
{
...
$this->arResult['TABS'] = $this->updateTabsByEvent($this->arResult['TABS']);
...
}
protected function updateTabsByEvent(array $tabs): array
{
$event = new Event('crm', 'onEntityDetailsTabsInitialized', [
'entityID' => $this->entityID,
'entityTypeID' => $this->entityTypeID,
'guid' => $this->guid,
'tabs' => $tabs,
]);
EventManager::getInstance()->send($event);
foreach ($event->getResults() as $result) {
if ($result->getType() === EventResult::SUCCESS) {
$parameters = $result->getParameters();
if (is_array($parameters) && is_array($parameters['tabs'])) {
$tabs = $parameters['tabs'];
}
}
}
return $tabs;
}
Подписавшись на событие можно добавить в существующий массив вкладок свою (можно удалить/изменить другие, но сейчас не об этом 🙂 ).
Добавить всего 1 таб — это скучно и неинтересно. При наступлении события мы будем обращаться к «менеджеру вкладок», который, в свою очередь, обработает и вернёт актуальный набор вкладок.
Создаём компонент (для примера возьмём готовый компонент из статьи «Отображение данных в виде списков в Bitrix24»). На текущем этапе оставим всё как есть, далее немного доработаем его для корректной работы во вкладке.
Создадим класс CrmCustomTabManager а пространстве имён Aclips\CustomCrm. (Не забудьте правильно описать автозагрузку классов).
<?php/**
* file path: local/php_interface/classes/Aclips/CustomCrm/CrmCustomTabManager.php
*/namespace Aclips\CustomCrm;
use Bitrix\Main\Loader;
Loader::includeModule('crm');
/**
* Менеджер для работы со вкладками сущностей CRM
*/
class CrmCustomTabManager
{
/**
* CRM права текущего пользователя
* @var \CCrmPerms
*/
protected \CCrmPerms $userPermissions;public [...]
Скопируйте и вставьте этот URL на ваш сайт под управлением WordPress
Скопируйте и вставьте этот код на ваш сайт