• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/menu.php
  • Класс: CMenu
  • Вызов: CMenu::Init
function Init($InitDir, $bMenuExt=false, $template=false, $onlyCurrentDir=false)
{
	global $USER;
	if(
		$this->debug !== false
		&& BitrixMainApplication::getInstance()->getKernelSession()["SESS_SHOW_INCLUDE_TIME_EXEC"] == "Y"
		&& (
			$USER->IsAdmin()
			|| BitrixMainApplication::getInstance()->getKernelSession()["SHOW_SQL_STAT"]=="Y"
		)
	)
	{
		$this->debug = new CDebugInfo(false);
		$this->debug->Start();
	}

	$io = CBXVirtualIo::GetInstance();

	$aMenuLinks = array();
	$bFounded = false;
	if($template === false)
		$sMenuTemplate = '';
	else
		$sMenuTemplate = $template;

	$InitDir = str_replace("\", "/", $InitDir);
	$Dir = $InitDir;

	$site_dir = false;
	if(defined("SITE_DIR") && SITE_DIR <> '')
	{
		$site_dir = SITE_DIR;
	}
	elseif(array_key_exists("site", $_REQUEST) && $_REQUEST["site"] <> '')
	{
		$rsSites = CSite::GetByID($_REQUEST["site"]);
		if($arSite = $rsSites->Fetch())
			$site_dir = $arSite["DIR"];
	}

	while($Dir <> '')
	{
		if($site_dir !== false && (mb_strlen(trim($Dir, "/")) < mb_strlen(trim($site_dir, "/"))))
			break;

		$Dir = rtrim($Dir, "/");
		$menu_file_name = $io->CombinePath($_SERVER["DOCUMENT_ROOT"], $Dir, ".".$this->type.".menu.php");

		if($io->FileExists($menu_file_name))
		{
			include($io->GetPhysicalName($menu_file_name));
			$this->MenuDir = $Dir."/";
			$this->arMenu = $aMenuLinks;
			$this->template = $sMenuTemplate;
			$bFounded = true;
			break;
		}

		if($Dir == "")
			break;

		$pos = bxstrrpos($Dir, "/");
		if($pos===false || $onlyCurrentDir == true)
			break;

		$Dir = mb_substr($Dir, 0, $pos + 1);
	}

	if($bMenuExt)
	{
		$Dir = $InitDir;
		while($Dir <> '')
		{
			if($site_dir !== false && (mb_strlen(trim($Dir, "/")) < mb_strlen(trim($site_dir, "/"))))
				break;

			$Dir = rtrim($Dir, "/");
			$menu_file_name = $io->CombinePath($_SERVER["DOCUMENT_ROOT"], $Dir, ".".$this->type.".menu_ext.php");

			if($io->FileExists($menu_file_name))
			{
				include($io->GetPhysicalName($menu_file_name));
				if(!$bFounded)
					$this->MenuDir = $Dir."/";

				$this->MenuExtDir = $Dir."/";
				$this->arMenu = $aMenuLinks;
				$this->template = $sMenuTemplate;
				$bFounded = true;
				break;
			}

			if($Dir == "")
				break;

			$pos = bxstrrpos($Dir, "/");
			if($pos===false || $onlyCurrentDir == true)
				break;

			$Dir = mb_substr($Dir, 0, $pos + 1);
		}
	}

	return $bFounded;
}