- Модуль: 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, "/ tnr x0B")."/";
//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;
}