• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/component_engine.php
  • Класс: partCComponentEngine
  • Вызов: CComponentEngine::guessComponentPath
public function guessComponentPath($folder404, $arUrlTemplates, &$arVariables, $requestURL = false)
{
	if (!isset($arVariables) || !is_array($arVariables))
		$arVariables = array();

	if ($requestURL === false)
		$requestURL = BitrixMainContext::getCurrent()->getRequest()->getRequestedPage();

	$folder404 = str_replace("\", "/", $folder404);
	if ($folder404 != "/")
		$folder404 = "/".trim($folder404, "/ tnrx0B")."/";

	//SEF base URL must match curent URL (several components on the same page)
	if(mb_strpos($requestURL, $folder404) !== 0)
		return false;

	$currentPageUrl = mb_substr($requestURL, mb_strlen($folder404));
	$this->cacheSalt = md5($currentPageUrl);

	$pageCandidates = array();
	$arUrlTemplates = $this->sortUrlTemplates($arUrlTemplates, $bHasGreedyPartsInTemplates);
	if (
		$bHasGreedyPartsInTemplates
		&& is_callable($this->resolveCallback)
	)
	{
		foreach ($arUrlTemplates as $pageID => $pageTemplate)
		{
			$arVariablesTmp = $arVariables;
			if ($this->__CheckPath4Template($pageTemplate, $currentPageUrl, $arVariablesTmp))
			{
				if ($this->hasNoVariables($pageTemplate))
				{
					$arVariables = $arVariablesTmp;
					return $pageID;
				}
				else
				{
					$pageCandidates[$pageID] = $arVariablesTmp;
				}
			}
		}
	}
	else
	{
		foreach ($arUrlTemplates as $pageID => $pageTemplate)
		{
			if ($this->__CheckPath4Template($pageTemplate, $currentPageUrl, $arVariables))
			{
				return $pageID;
			}
		}
	}

	if (!empty($pageCandidates) && is_callable($this->resolveCallback))
	{
		return call_user_func_array($this->resolveCallback, array($this, $pageCandidates, &$arVariables));
	}

	return false;
}