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

Кастомизация компонента карточки

Кастомизация интерфейса карточки - достаточно типовая задача. Обычно для этого приходилось выносить в 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..

Можно унаследовать этот экстеншн и подключить его в шаблоне вашего переопределенного компонента.



© «Битрикс», 2001-2025, «1С-Битрикс», 2025