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

Router

Общее


Маршрутизация на списки и детальные карточки в "старом" API осуществляется с помощью комплексных компонентов.

На каждый тип сущности есть физическая страница, где лежит комплексный компонент, привязанный к этому типу сущности.

Комплексный компонент парсит адрес / запрос и достает оттуда набор "переменных".

Далее на основе типа сущности и значении переменных определялось, какой компонент необходимо получить.

В настройки комплексного компонента можно передать шаблоны ссылок на страницы.

При этом во всех вложенных компонентах приходилось передавать шаблоны ссылок из компонента в компонент, что порождало довольно много дублирующего кода.

В новом API используется другой подход.

В корне (файл /crm/type/index.php) подключается только один компонент crm.router.

У этого компонента есть следующие параметры:

  • isSefMode если передано n, то маршрутизация будет работать в режиме без ЧПУ;
  • root - путь к файлу, где подключен компонент, относительно корня сайта.

Эти параметры конфигурируют Service\Router. Сервис парсит запрос и возвращает данные о том, какой компонент с какими параметрами надо подключить.

В шаблоне компонента crm.router подключается нужный компонент с параметрами.

Во всех новых компонентах ссылки на страницы получаются через этот же сервис. Таким образом обеспечивается полное единообразие шаблонов ссылок и способа их обработки.

На стороне фронтенда работу с шаблонами осуществляет js-экстеншн crm.router.

На данный момент сервис позволяет генерировать ссылки на любые типы сущностей.

За переключение правил формирования адресов отвечают методы фабрики:

  • Factory::isNewRoutingForDetailEnabled
  • Factory::isNewRoutingForListEnabled
  • Factory::isNewRoutingForAutomationEnabled

Как работает "показ вне CRM"

Благодаря единому механизму формирования и обработки ссылок появилась возможность вынести смарт-процессы целиком в отдельные разделы.

Режимы работы роутера

Роутер может работать в двух режимах - с ЧПУ и без ЧПУ.

Режим работы с ЧПУ подразумевает, что ссылки формируются по шаблонам, часть параметров в которых указана в пути, а не в запросе.

Например, если шаблон страницы настроек смарт-процесса выглядит как crm/type/#entityTypeId#/, то ссылка на настройки типа с идентификатором 130 будет выглядеть как /crm/type/130/.

Если роутер работает в режиме без ЧПУ, то ссылки формируются и парсятся следующим образом:

  • В параметре с передается название компонента.
  • В параметре cp передаются параметры компонента.
  • В параметре cpt передается шаблон компонента.

Режим работы "без ЧПУ" не используется в продукте, работоспособность не гарантируется.

Принцип формирования полных ссылок

Полные ссылки в режиме ЧПУ строятся следующим образом:


{siteFolder}/{root}/{path}/?{parameters}
  • siteFolder - корневая папка сайта, в котором работает роутер;
  • root - корень, от которого работает роутер;
  • path - путь, полученный из шаблона ссылки;
  • parameters - набор дополнительных get-параметров.

Методы


Методы, возвращающие шаблоны ссылок, отдают их в виде строки.

Методы, возвращающие обработанные ссылки, отдают их в виде объекта \Bitrix\Main\Web\Uri.


Метод Описание С версии
public function reInit(): self
Заново инициализирует шаблоны ссылок с учетом кастомных разделов.
public function getUserPersonalUrlTemplate(): ?string
Вернет шаблон ссылки на профиль пользователя.
public function getUserPersonalUrl(int $userId): Uri
Вернет ссылку на профиль пользователя с идентификатором $userId.
public function setRoot(string $root): Router
Установит новый корень.
public function getRoot(): string
Вернет корень.
public function setSefMode(bool $isSefMode): Router
Управляет режимом роутинга. Если $isSefMode = true, то роутер работает в режиме ЧПУ. Если false, то в режиме без ЧПУ.
public function isSefMode(): bool
Вернет true, если роутер работает в режиме ЧПУ. По умолчанию этот режим всегда включен.
public function setSiteId(string $siteId): Router
Установит идентификатор сайта $siteId, который используется для генерации ссылок.
public function getSiteId(): ?string
Вернет идентификатор сайта.
public function getDefaultUrlTemplates(): array
Вернет шаблоны ссылок по умолчанию. Ключ - это название компонента, а значение - шаблон ссылки.
public function saveCustomUrlTemplates(array $templates): void
Сохранит кастомные шаблоны ссылок $templates в опциях. При определении адресов в первую очередь берутся кастомные шаблоны. Если нет кастомного шаблона, то используется шаблон по умолчанию.
public function getCustomUrlTemplates(): array
Вернет кастомные шаблоны ссылок.
public function getPreparedTemplates(): array
Вернет сформированные шаблоны ссылок с учетом корня роутера и корня идентификатора сайта.
public function getTemplatesForJsRouter(): array
Вернет сформированный набор шаблонов для передачи в crm.router.
public function parseRequest
(HttpRequest $httpRequest = null): ParseResult
Распарсит запрос $httpRequest с учетом своей конфигурации и вернет объект ParseResult .
Если $httpRequest не передан, будет использован текущий запрос из \Bitrix\Main\Application::getInstance->getContext()->getRequest().
public function getTypeListUrl(): ?Uri
Вернет ссылку на список смарт-процессов.
public function getTypeDetailUrl
(int $entityTypeId): ?Uri
Вернет ссылку на страницу настроек смарт-процесса с идентификатором типа CRM $entityTypeId.
public function getItemListUrl
(int $entityTypeId, int $categoryId = null): ?Uri
Вернет ссылку на список элементов сущности с идентификатором типа CRM $entityTypeId направления $categoryId в представлении типа "Список".
public function getKanbanUrl
(int $entityTypeId, int $categoryId = null): ?Uri
Вернет ссылку на список элементов сущности с идентификатором типа CRM $entityTypeId направления $categoryId в представлении типа "Канбан".
public function getItemDetailUrlCompatibleTemplate
(int $entityTypeId): ?string
Вернет шаблон ссылки на детальную страницу элемента сущности с идентификатором $entityTypeId.
public function getItemDetailUrl
(int $entityTypeId, int $id = 0, int $categoryId = null, 
?ItemIdentifier $parentItemIdentifier = null): ?Uri

  • $entityTypeId - идентификатор типа сущности CRM;
  • $id - идентификатор элемента;
  • $categoryId - идентификатор направления. Необходимо указывать > 0, если элемент требуется перенести в это новое направление;
  • $parentItemIdentifier - комплексный идентификатор элемента родителя, которым должно быть заполнено соответствующее поле связи.
Вернет ссылку на детальную страницу элемента.
public function isNewRoutingForListEnabled
(int $entityTypeId): bool
Вернет true, если для типа с идентификатором $entityTypeId включен новый роутинг страниц в представлении "Список".
public function isNewRoutingForDetailEnabled
(int $entityTypeId): bool
Вернет true, если для типа с идентификатором $entityTypeId включен новый роутинг детальных страниц.
public function isNewRoutingForAutomationEnabled
(int $entityTypeId): bool
Вернет true, если для типа с идентификатором $entityTypeId включен новый роутинг страниц с роботами.
public function getItemCopyUrl
(int $entityTypeId, int $id = 0, int $categoryId = null): ?Uri
Вернет ссылку на копирование элемента $id типа с идентификатором CRM $entityTypeId направления $categoryId.
public function getUserFieldListUrl(int $entityTypeId): ?Uri
Вернет ссылку на список с настройками пользовательских полей типа с идентификатором $entityTypeId.
public function getUserFieldDetailUrl
(int $entityTypeId, int $fieldId): ?Uri
Вернет ссылку на детальную страницу настройками пользовательских полей типа с идентификатором $fieldId типа $entityTypeId.
public function getCategoryListUrl(int $entityTypeId): ?Uri
Вернет ссылку на страницу туннелей продаж типа с идентификатором $entityTypeId.
public function getProductDetailUrlTemplate(): string
Вернет шаблон ссылки на детальную карточку товара.
public function getProductDetailUrl
(int $productId = 0): Uri
Вернет ссылку на детальную карточку товара с идентификатором $productId.
public function getQuotePrintUrl
(int $quoteId, bool $isBlank): Uri
Вернет ссылку на печать коммерческого предложения с идентификатором $quoteId.
public function getQuotePdfUrl
(int $quoteId, bool $isBlank): Uri
Вернет ссылку на скачивание печатной формы коммерческого предложения с идентификатором $quoteId.
public function getItemListUrlInCurrentView
(int $entityTypeId, int $categoryId = null): ?Uri
Вернет ссылку на список элементов типа $entityTypeId направления $categoryId в последнем использованном представлении.
public function setCurrentListView
(int $entityTypeId, string $view): Router
Сохранит тип представления $view списка элементов типа $entityTypeId.
$view может принимать значение либо KANBAN либо LIST.
public function getCurrentListView
(int $entityTypeId): string
Вернет сохраненный тип представления списка элементов типа $entityTypeId.
public function getDefaultListView
(int $entityTypeId): string
Вернет тип представления списка элементов типа $entityTypeId по умолчанию.
public function setDefaultListView
(int $entityTypeId, string $view): void
Установит тип представления по умолчанию $view для списка элементов типа $entityTypeId.
public function getAutomationUrlTemplate
(int $entityTypeId): ?string
Вернет шаблон ссылки на настройки роботов типа $entityTypeId.
public function getAutomationUrl
(int $entityTypeId, int $categoryId = null): ?Uri
Вернет ссылку на настройки роботов типа $entityTypeId направления $categoryId.
public function getFileUrl
(int $entityTypeId, int $id, string $fieldName, int $fileId): Uri

  • $entityTypeid - идентификатор типа CRM;
  • $id - идентификатор элемента;
  • $fieldName - название поля, где хранится файл;
  • $fileId - идентификатор файла.
Вернет ссылку на файл.
public function getDefaultComponent(): string
Вернет компонент по умолчанию, который должен быть подключен, если не удалось определить компонент из запроса.
public function setDefaultComponent
(string $defaultComponent): self
Установит компонент по умолчанию.
public function getDefaultComponentParameters(): array
Вернет набор параметров компонента по умолчанию.
public function setDefaultComponentParameters
(array $defaultComponentParameters): self
Установит набор параметров компонента по умолчанию.
public function getConsistentUrlFromPartlyDefined
(string $currentUrl): ?Uri
Метод попытается определить корректный адрес по его части.
public function getChildrenItemsListUrl
(int $entityTypeId, int $parentEntityTypeId, 
int $parentEntityId): ?Uri
Вернет ссылку на список дочерних элементов типа $entityTypeId, отфильтрованных по родителю типа $parentEntityTypeId с ид $parentEntityId.
public function getItemDetailComponentName
(int $entityTypeId): ?string
Вернет название шаблона компонента детальной страницы элемента типа $parentEntityTypeId.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024