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

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
Наверх