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

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

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