• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/templates.php
  • Класс: CTemplates
  • Вызов: CTemplates::GetList
static function GetList($arFilter = array(), $arCurrentValues = array(), $template_id = array())
{
	if(!is_set($arFilter, "FOLDER"))
	{
		$arr = CTemplates::GetFolderList();
		$arFilter["FOLDER"] = array_keys($arr);
	}

	$arTemplates = array();
	foreach($arFilter["FOLDER"] as $folder)
	{
		$folder = _normalizePath($folder);
		$arTemplates[$folder] = array();
		$arPath = array(
			"/bitrix/modules/".$folder."/install/templates/",
			BX_PERSONAL_ROOT."/templates/.default/",
		);

		if(is_array($template_id))
		{
			foreach($template_id as $v)
				$arPath[] = BX_PERSONAL_ROOT."/templates/"._normalizePath($v)."/";
		}
		elseif($template_id <> '')
		{
			$arPath[] = BX_PERSONAL_ROOT."/templates/"._normalizePath($template_id)."/";
		}

		foreach($arPath as $path)
			CTemplates::__FindTemplates($path, $arTemplates[$folder], $arCurrentValues, $folder);

		if(empty($arTemplates[$folder]))
		{
			unset($arTemplates[$folder]);
		}
		else
		{
			$arTemplate = $arTemplates[$folder];
			$arTemplateTemp = array();
			$arSeparators = array();
			foreach($arTemplate as $k=>$val)
				if($val["SEPARATOR"]=="Y")
					$arSeparators[$k] = $val;

			foreach($arSeparators as $sep_id=>$val_sep)
			{
				$arTemplateTemp[$sep_id] = $val_sep;
				reset($arTemplate);
				while(list($k, $val) = current($arTemplate))
				{
					next($arTemplate);

					if($val===false)
						continue;

					if($k==$sep_id)
					{
						while(list($k, $val) = current($arTemplate))
						{
							next($arTemplate);

							if($val === false)
								continue;
							if($val["SEPARATOR"]=="Y")
								break;
							if($val["PARENT"] <> '' && $val["PARENT"]!=$sep_id)
								continue;

							$arTemplateTemp[$k] = $val;
							$arTemplate[$k] = false;
						}
						//continue;
					}
					if($val["PARENT"]==$sep_id)
					{
						$arTemplateTemp[$k] = $val;
						$arTemplate[$k] = false;
					}
				}
			}

			$bW = true;
			foreach($arTemplate as $k=>$val)
			{
				if($val===false || $val["SEPARATOR"] == "Y")
					continue;
				if($bW)
				{
					if(!empty($arSeparators))
						$arTemplateTemp[md5(uniqid(rand(), true))] = array("NAME"=> "----------------------------", "SEPARATOR"=>"Y");
					$bW = false;
				}
				$arTemplateTemp[$k] = $val;
				$arTemplate[$k] = false;
			}

			$arTemplates[$folder] = $arTemplateTemp;
		}
	}
	return $arTemplates;
}