meta = ['title'=>'','keywords'=>'','description'=>'']; $this->prefix="main"; $this->mod_cont=""; $this->vars = ['tpl_arr'=>&$this->tpl_arr,'tpl'=>&$this]; } public function fetch($t,&$vars=array(),$prefix=false,$cache_en=false) { //выгружаем переменные в функцию if (is_array($this->vars)) extract($this->vars); if (is_array($vars)) extract($vars); //определяем путь до шаблона $this->load_tpls[] = $__p = $this->path($t,$prefix); //инклудим шаблон, буферизуем его выхлоп ob_start(); include($__p); return ob_get_clean(); } public function path($tpl_path,$prefix=false) { if ($prefix===false) $prefix = $this->prefix; $path = $prefix.DS.$tpl_path.".tpl"; $path_app = realpath((APPDIR."TPL".DS.$path)); $path_sys = realpath((SYSDIR."TPL".DS.$path)); if (is_file($path_app)) return $path_app; if (is_file($path_sys)) return $path_sys; exit($path." - NOT FOUND TPL"); } public function display($prefix=false,$main_tpl="main") { $tpl = &$this; if ($this->debug) echo_arr($this->load_tpls); if (arr_v($_POST,'clear')=='yes') $this->clear=1; if($prefix===false) $prefix = $this->prefix; include SYSDIR."TPL".DS.$prefix.DS."static_list.php"; $this->static_dep_apply(); $this->add_need_static(); $path= $this->path($main_tpl,$prefix); if ($this->clear) { echo $this->mod_cont; return ($this->clear=0); } $tpl_arr = &$this->tpl_arr; include($path); } //static elements public $need_st_list=[],$static_list=[],$static_dep=[],$top_st=[],$bottom_st=[]; public function need_static($inp) { if (!is_array($inp)) $inp = [$inp]; $cnt = count($inp); for($i=0;$i<$cnt;$i++) { $v = $inp[$i]; if (empty($v)) continue; $this->need_st_list[$v]=1; } } public function static_dep_apply($dep_list=false) { if ($dep_list===false) $dep_list=$this->static_dep; if (!is_array($dep_list) || empty($dep_list)) return; $need = &$this->need_st_list; foreach ($dep_list as $m_name => $dep_items) { //для выключенных модулей не применяем зависимости if ( !(isset($need[$m_name]) && $need[$m_name]==1) ) continue; foreach ($dep_items as $k => $dep) { $need[$dep]=1; } } } public function add_need_static() { $need = $this->need_st_list; $list = $this->static_list; foreach ($this->static_list as $key => $item) { $pos = arr_v($item,'pos',false); $type = arr_v($item,'type',""); $link = arr_v($item,'link',""); if ($pos===false) $pos = ($type=="js") ? "bottom" : "top"; $mod=arr_v($item,'mod','default'); if ( !((isset($need[$mod]) && $need[$mod]==1) || $mod=='default') ) continue; switch ($type) { case 'js': $cont = $this->js($link); break; case 'css': $cont = $this->css($link); break; default: continue 2; break; } if ($pos=="top") $this->top_st[]=$cont; else $this->bottom_st[]=$cont; } $_gl = "\n\t"; $this->head_cont.=implode($_gl,$this->top_st); $this->cont_bottom.=implode($_gl,$this->bottom_st); } public function css($p,$min=0) { return ''; } public function js($p,$min=0) { return ''; } public function p2min($path,$min,$ext) { if ($min) { $path = str_replace('.'.$ext,'.min.'.$ext,$path); $path = str_replace('min.min','min',$path); } return $path; } }