Кастомизация компонента карточки
Кастомизация интерфейса карточки - достаточно типовая задача. Обычно для этого приходилось выносить в local весь компонент (а то и несколько), полностью его копировать и поддерживать.
Для карточки смарт-процесса и новой карточки предложения это немного проще.
Для начала необходимо переопределить сервис роутинга, как в предыдущих примерах.
use Bitrix\Crm\Service; use Bitrix\Crm\Service\Router; class MyContainer extends Service\Container { public function getRouter(): Router { return new class extends Router { public function parseRequest(HttpRequest $httpRequest = null): Router\ParseResult { $result = parent::parseRequest($httpRequest); if (!defined('SUPER_ENTITY_TYPE_ID')) { return $result; } if ($result->getComponentName() === 'bitrix:crm.item.details') { $parameters = $result->getComponentParameters(); $entityTypeId = $parameters['ENTITY_TYPE_ID'] ?? $parameters['entityTypeId'] ?? null; if ((int)$entityTypeId === SUPER_ENTITY_TYPE_ID) { $result = new Router\ParseResult( 'dev:crm.item.details', $parameters, $result->getTemplateName() ); } } return $result; } }; } };
Теперь для одного единственного смарт-процесса за отрисовку детальной карточки будет отвечать отдельный компонент.
Код класса компонента очень компактный, состоит из единственного метода. Большая часть логики сосредоточена в родительском классе.
Код шаблона тоже небольшой. Весь javascript-код вынесен в отдельный js-экстеншн crm.item-details-component..
Можно унаследовать этот экстеншн и подключить его в шаблоне вашего переопределенного компонента.