Example #1
0
 public 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 (strlen($template_id) > 0) {
             $arPath[] = BX_PERSONAL_ROOT . "/templates/" . _normalizePath($template_id) . "/";
         }
         foreach ($arPath as $path) {
             CTemplates::__FindTemplates($path, $arTemplates[$folder], $arCurrentValues, $folder);
         }
         if (count($arTemplates[$folder]) <= 0) {
             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) = each($arTemplate)) {
                     if ($val === false) {
                         continue;
                     }
                     if ($k == $sep_id) {
                         while (list($k, $val) = each($arTemplate)) {
                             if ($val === false) {
                                 continue;
                             }
                             if ($val["SEPARATOR"] == "Y") {
                                 break;
                             }
                             if (strlen($val["PARENT"]) > 0 && $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 (count($arSeparators) > 0) {
                         $arTemplateTemp[md5(uniqid(rand(), true))] = array("NAME" => "----------------------------", "SEPARATOR" => "Y");
                     }
                     $bW = false;
                 }
                 $arTemplateTemp[$k] = $val;
                 $arTemplate[$k] = false;
             }
             $arTemplates[$folder] = $arTemplateTemp;
         }
     }
     return $arTemplates;
 }