• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Router.php
  • Класс: Bitrix\Crm\Service\Router
  • Вызов: Router::getUrlForTemplate
protected function getUrlForTemplate(string $componentName, array $parameters = [], array $getParameters = []): ?Uri
{
	$entityTypeId = $parameters['ENTITY_TYPE_ID'] ?? $parameters['entityTypeId'] ?? null;
	$entityTypeId = (int)$entityTypeId;

	if (
		$entityTypeId === \CCrmOwnerType::SmartDocument
		&& \Bitrix\Crm\Settings\Crm::isDocumentSigningEnabled()
		&& in_array($componentName, ['bitrix:crm.item.list', 'bitrix:crm.item.kanban'])
	)
	{
		return new Uri(
			$componentName === 'bitrix:crm.item.list'
				? '/sign/list/'
				: '/sign/'
		);
	}

	$event = new Event('crm', 'onGetUrlForTemplateRouter', [
		'componentName' => $componentName,
		'parameters' => $parameters,
		'getParameters' => $getParameters,
		'entityTypeId' => $entityTypeId
	]);
	$event->send();
	foreach ($event->getResults() as $result)
	{
		if ($result->getType() !== \Bitrix\Main\EventResult::ERROR)
		{
			$return = $result->getParameters();
			if ($return instanceof Uri)
			{
				return $return;
			}
		}
	}

	$template = $this->getUrlTemplates()[$componentName] ?? null;
	if ($template)
	{
		if ($this->isSefMode())
		{
			$path = \CComponentEngine::makePathFromTemplate($template, $parameters);
			if ($path)
			{
				$url = new Uri($this->getFullPath($path, $entityTypeId));
				if (!empty($getParameters))
				{
					$url->addParams($getParameters);
				}

				return $url;
			}
		}
		else
		{
			$uri = new Uri($this->getFullPath('type', $entityTypeId));
			$params = [
				static::GET_COMPONENT_NAME => $componentName,
				static::GET_COMPONENT_PARAMETERS => $parameters,
			];
			$params = array_merge($getParameters, $params);

			return $uri->addParams($params);
		}
	}

	return null;
}