Кастомизация компонента карточки
Кастомизация интерфейса карточки - достаточно типовая задача. Обычно для этого приходилось выносить в local весь компонент (а то и несколько), полностью его копировать и поддерживать.
Для карточки смарт-процесса и новой карточки предложения это немного проще.
Для начала необходимо переопределить сервис роутинга, как в предыдущих примерах.
Код работает с версии CRM 25.500.0
use Bitrix\Crm\Service; use Bitrix\Crm\Service\Router; class MyContainer extends \Bitrix\Crm\Service\Container { public function getRouter(): \Bitrix\Crm\Service\Router { return new class extends \Bitrix\Crm\Service\Router { public function matchPage(\Bitrix\Main\HttpRequest $request): \Bitrix\Crm\Service\Router\Contract\Page { $page = parent::matchPage($request); if (!defined('SUPER_ENTITY_TYPE_ID')) { return $page; } if ($page instanceof \Bitrix\Crm\Service\Router\Contract\Page\HasComponent) { $component = $page->component(); if ($component->name() === 'bitrix:crm.item.details') { $entityTypeId = $component->parameter('ENTITY_TYPE_ID') ?? $component->parameter('entityTypeId'); if ((int)$entityTypeId === SUPER_ENTITY_TYPE_ID) { $overriddenComponent = new \Bitrix\Crm\Service\Router\Component\Component( name: 'dev:crm.item.details', parameters: $component->parameters(), template: $component->template(), ); // Можно вернуть конкретную реализацию \Bitrix\Crm\Service\Router\Contract\Page return new \Bitrix\Crm\Service\Router\Page\ComponentPage($overriddenComponent); } } } return $page; } }; } }
Теперь для одного единственного смарт-процесса за отрисовку детальной карточки будет отвечать отдельный компонент.
Код класса компонента очень компактный, состоит из единственного метода. Большая часть логики сосредоточена в родительском классе.
Код шаблона тоже небольшой. Весь javascript-код вынесен в отдельный js-экстеншн crm.item-details-component..
Можно унаследовать этот экстеншн и подключить его в шаблоне вашего переопределенного компонента.