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

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

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

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



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