Всем привет. неськолько месяцев назад начал разрабатывать новый бесплатный продукт: light_engine - это простая и лёгкая веб-обвязка для мморпг игры lineage2. С тех времён я достиг многово, но одно мне не удалось сделать до сих пор - шаблонизатор. Собственно я ищу чеговека кот.поможет мне его сделать для моей вебки. Исходники и sql для БД предоставлю в icq.
одно to read, но другое to write.. я просто не могу взять любой шаблонизатор и прикрутить его себе. я просто не пойму как это сделть в моём случае..
кто желает попробовать => _http://dump.ru/file/4046646 я просто не пойму как мне всё это организовать.
в index.php PHP: <?php require_once 'templates/templates.class.php'; $tpl = new template(); $tpl->load_template('header.tpl'); $tpl->set('{nameurl}', $nameurl); $tpl->set('{deslurl}', $deslurl); $tpl->compile('header'); echo $tpl->result['header']; $tpl->global_clear(); ?> шаблонизатор templates.class.php PHP: <?php class template { var $dir = '.'; var $template = null; var $copy_template = null; var $data = array(); var $block_data = array(); /* дада это */ var $result = array('temp' => '', 'vote' => '', 'speedbar' => '', 'content' => '' ); var $template_parse_time = 0; 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; } 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; } function load_template($tpl_name) { $time_before = $this->get_real_time(); if ($tpl_name == '' || !file_exists($this->dir . "/templates/" . $tpl_name)) { die ("Невозможно загрузить шаблон: ". $tpl_name); return false;} $this->template = file_get_contents($this->dir . "/templates/" . $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; } function sub_load_template($tpl_name) { $tpl_name = totranslit($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; } function _clear() { $this->data = array(); $this->block_data = array(); $this->copy_template = $this->template; } function clear() { $this->data = array(); $this->block_data = array(); $this->copy_template = null; $this->template = null; } function global_clear() { $this->data = array(); $this->block_data = array(); $this->result = array(); $this->copy_template = null; $this->template = null; } 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; } function get_real_time() { list($seconds, $microSeconds) = explode(' ', microtime()); return ((float)$seconds + (float)$microSeconds); } } ?> дальше сам крути под себя...
PHP: <?php class Template { /** * Переменные шаблона * * @var array */ protected $vars; /** * Файл шаблона * * @var string */ private $template; public $tblocks; public function __construct() { $this->vars = array(); $this->template = ''; $this->tblocks = array(); } /** * Объявить переменную шаблона * * @param string $var * @param string $value */ public function set($var, $value = '') { $this->vars[$var] = $value; } /** * Установить файл шаблона * * @param string $tpl */ public function assign($tpl) { $this->template = PATH. 'templates/'. $tpl. '.tpl'; if (file_exists($this->template)) { $this->template = file_get_contents($this->template); $matches = array(); $count = preg_match_all('/{row::([A-Za-z0-9]+)}(.*){\/row::/', $this->template, $matches); if ($count > 0) { for ($i = 0; $i < $count; $i++) { $this->tblocks[$matches[1][$i]] = $matches[2][$i]; } $this->template = preg_replace('/{row::([A-Za-z0-9]+)}(.+){\/row::([A-Za-z0-9]+)}\\n/i', '', $this->template); } } else { echo '<small><b>Error.</b> Template <u>'.basename($this->template). '</u> is not exists!</small><br />'; $this->template = ''; } } /** * Пропарсить шаблон * */ public function display($eval = False) { if ($this->template) { foreach ($this->vars AS $var => $value) { $this->template = str_replace('{'. $var. '}', $value, $this->template); if (empty($value)) { $this->template = preg_replace('/{block::'. $var. '}(.+){\/block::'. $var. '}\\n/i', '', $this->template); } else { $this->template = str_replace(array('{block::'. $var. '}', '{/block::'. $var. '}'), '', $this->template); } } if ($eval) { eval('?>'. $this->template); } else { echo $this->template; } } unset($this->vars); unset($this->tblocks); unset($this->template); } } ?>
я как раз почти закончил свой шаблонизатор, магу дать исходник... или даже переделать для работы с твоим двиглом но есть кое какие условия ($$ мя не интересуют) PS: если ТС интересно то пиши в личку