下面我们就来看看如何简单的来实现php的模板引擎
parser.class.php
_tpl = file_get_contents($_tplfile)) { exit('error:模版文件读取错误'); } } // 解析普通变量 private function parvar() { $_patten = '//'; if (preg_match($_patten,$this->_tpl)) { $this->_tpl = preg_replace($_patten, _vars['$1'];?>,$this->_tpl); } } //解析if语句 private function parif(){ $_pattenif = '//'; $_pattenelse = '//'; $_pattenendif = '//'; if (preg_match($_pattenif,$this->_tpl)) { if (preg_match($_pattenendif,$this->_tpl)) { $this->_tpl = preg_replace($_pattenif,_vars['$1']){?>,$this->_tpl); $this->_tpl = preg_replace($_pattenendif,,$this->_tpl); if (preg_match($_pattenelse,$this->_tpl)) { $this->_tpl = preg_replace($_pattenelse,,$this->_tpl); } }else{ echo 'error:if语句没有关闭!'; } } } //php注释解析 private function parcommon(){ $_pattencommon = '//'; if (preg_match($_pattencommon,$this->_tpl)) { $this->_tpl = preg_replace($_pattencommon,,$this->_tpl); } } //解析foreach语句 private function parforeach(){ $_pattenforeach = '//'; $_pattenforeachend = '//'; $_pattenforeachvalue = '//'; if (preg_match($_pattenforeach,$this->_tpl)) { if (preg_match($_pattenforeachend,$this->_tpl)) { $this->_tpl = preg_replace($_pattenforeach, _vars['$1'] as \$$2=>\$$3) {?>, $this->_tpl); $this->_tpl = preg_replace($_pattenforeachend, , $this->_tpl); if (preg_match($_pattenforeachvalue, $this->_tpl)) { $this->_tpl = preg_replace($_pattenforeachvalue,,$this->_tpl); } }else{ echo 'error:foreach语句没有关闭!'; } } } //解析include方法 private function parinclude(){ $_patteninclude = '//'; if (preg_match($_patteninclude,$this->_tpl,$_file,$_file)) { if (!file_exists($_file[1])||empty($_file)) { echo 'error:包含文件出错!'; } $this->_tpl = preg_replace($_patteninclude,,$this->_tpl); } } //解析系统变量方法 private function parconfig(){ $_pattenconfig = '//'; if (preg_match($_pattenconfig,$this->_tpl)) { $this->_tpl = preg_replace($_pattenconfig,_config['$1'];?>,$this->_tpl); } } // 对外公共方法 public function compile($_path) { // 解析模版文件 $this->parvar(); $this->parif(); $this->parforeach(); $this->parinclude(); $this->parcommon(); $this->parconfig(); // 生成编译文件 if (! file_put_contents($_path, $this->_tpl)) { exit('error:编译文件生成错误!'); } }}?>
templates.class.php
xpath('/root/taglib'); foreach ($_taglib as $_tag) { $this->_config[$_tag->name] = $_tag->value; } } //assign()方法,用于注入变量 public function assign($_var,$_value){ //$_var用于同步模版里的变量名 //$_value表示值 if (isset($_var)&&!empty($_var)) { $this->_vars[$_var] = $_value; }else{ exit('error:设置模版变量!'); } } //display()方法 public function display($_file) { $_tplfile = tpl_dir . $_file; // 判断文件是否存在 if (! file_exists($_tplfile)) { echo 'error:模版文件不存在!自动创建index.tpl模版文件!'; file_put_contents($_tplfile,'index'); exit(); } //生成编译文件 $_path = tpl_c_dir.md5($_file).'-'.$_file.'.php'; //缓存文件 $_cachefile = cache.md5($_file).'-'.$_file.'.html'; //当第二次运行相同文件,直接载入缓存文件 if (is_cache) { //判断缓存文件和编译文件都存在 if (file_exists($_cachefile)&&file_exists($_path)) { //判断模版文件是否修改过 if (filemtime($_path)>=filemtime($_tplfile)&&filemtime($_cachefile)>=filemtime($_path)) { include $_cachefile; echo ''; return; } } } //当编译文件不存在或者文件发生改变则重新生成 if (!file_exists($_path)||filemtime($_path)compile($_path); } //载入编译文件 include $_path; if (is_cache) { //获取缓冲区数据 file_put_contents($_cachefile,ob_get_contents()); //清楚缓冲区 ob_end_clean(); //载入缓存文件 include $_cachefile; } }}?>
templates.php
display('index.tpl');?>
templates/index.tpl
123321
...
系统变量
普通变量
config/config.xml
webname xxx网站
您可能感兴趣的文章:php smarty模版引擎中的缓存应用php smarty模版引擎中的缓存应用php smarty模版引擎中变量操作符及使用方法thinkphp模版引擎之变量输出详解
http://www.bkjia.com/phpjc/1119999.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1119999.htmltecharticlephp制作简单模版引擎,php模版引擎 php模板引擎就是一个php类库,使用它可以使php代码和html代码进行分离,使代码的可读性和维护性得到显...
