Шаблонизатор от DLE Вот решил выложить на мой взгляд очень полезную штуку) шаблонизатор скрученный с ДЛЕ, но немного изменен, думаю многим должно помочь в написании своей CMS ну и т.д )) Что можно сказать о его возможностях!? Возможность добавлять php код в tpl, вывод переменных такого типа : {.....} Ну а дальше я думаю разберитесь Код index.php =) PHP: <? include("templates.class.php"); //подключение class $tpl = new Template; //инициируем класс $tpl->dir = 'template/'; //задаём местоположение папки с шаблонами $tpl->load_template('main.tpl'); //загружаем каркас $tpl->set('{sub_templ}', $tpl->sub_load_template('sub.tpl')); //подключаем код блока //подставляем значения переменных $tpl->set('{var1}', 'блок2'); $tpl->set('{var2}', 'блок3'); $tpl->compile('main'); //собираем шаблон eval (' ?' . '>' . $tpl->result['main'] . '<' . '?php '); //выводим результат работы, с возможностью вставки пхп кода в tpl $tpl->global_clear(); //очищаем все переменные для возможно следующего шаблона ?> Код templates.class.php PHP: <?php class Template { public $dir = '.'; public $template = null; public $copy_template = null; public $data = array(); public $block_data = array(); public $result = array('info' => '', 'content' => ''); public $template_parse_time = 0; //задаём параметры основных переменных подгрузки шаблона public function set($name , $var) { if (is_array($var) && count($var)) { foreach ($var as $key => $key_var) { $this->set($key , $key_var); } } else $this->data[$name] = $var; } //обозначаем блоки public function set_block($name , $var) { if (is_array($var) && count($var)) { foreach ($var as $key => $key_var) { $this->set_block($key , $key_var); } } else $this->block_data[$name] = $var; } //производим загрузку каркасного шаблона public function load_template($tpl_name) { $time_before = $this->get_real_time(); if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)) { die ("Невозможно загрузить шаблон: ". $tpl_name); return false;} $this->template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name); if ( stristr( $this->template, "{include file=" ) ) { $this->template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies","\$this->sub_load_template('\\1')", $this->template); } $this->copy_template = $this->template; $this->template_parse_time += $this->get_real_time() - $time_before; return true; } // этой функцией загружаем "подшаблоны" public function sub_load_template($tpl_name) { if ($tpl_name == '' || !file_exists($this->dir . DIRECTORY_SEPARATOR . $tpl_name)) { die ("Невозможно загрузить шаблон: ". $tpl_name); return false;} $template = file_get_contents($this->dir . DIRECTORY_SEPARATOR . $tpl_name); return $template; } // очистка переменных шаблона public function _clear() { $this->data = array(); $this->block_data = array(); $this->copy_template = $this->template; } public function clear() { $this->data = array(); $this->block_data = array(); $this->copy_template = null; $this->template = null; } //полная очистка включая результаты сборки шаблона public function global_clear() { $this->data = array(); $this->block_data = array(); $this->result = array(); $this->copy_template = null; $this->template = null; } //сборка шаблона в единое целое public function compile($tpl) { $time_before = $this->get_real_time(); foreach ($this->data as $key_find => $key_replace) { $find[] = $key_find; $replace[] = $key_replace; } $result = str_replace($find, $replace, $this->copy_template); if (count($this->block_data)) { foreach ($this->block_data as $key_find => $key_replace) { $find_preg[] = $key_find; $replace_preg[] = $key_replace; } $result = preg_replace($find_preg, $replace_preg, $result); } if (isset($this->result[$tpl])) $this->result[$tpl] .= $result; else $this->result[$tpl] = $result; $this->_clear(); $this->template_parse_time += $this->get_real_time() - $time_before; } //счётчик времени выполнения запросов сборки public function get_real_time() { list($seconds, $microSeconds) = explode(' ', microtime()); return ((float)$seconds + (float)$microSeconds); } } ?> Ну вот и все) желаю удачи!
А не подскажете, как на этой радости сделать, вывод другого файла допустим ставим {news} и будет выводится информация из файла news.tpl
Как вариант: PHP: $tpl->set('{news}', file_get_contents('news.tpl')); Возмите полноценный шаблонизатор
Добрый день, как создать теги понятно, но не понятно как создать тег типа {content} который по ссылке такого типа (http://localhost/index.php?do=reg) будет открывать страницу регистрации в шаблоне? либо любую другую страницу сайта?! Заранее спасибо!!!