简单的自定义php模板引擎(2)

整个模板类的工作流程就是先实例化模板类对象,然后利用assign和assignArray方法给模板中的变量赋值,然后调用show方法,将模板和配置文件传入编译类的实例化对象中然后直接include编译后的php、html混编文件,显示输出。简单的流程就是这样,详细的代码如下 

public function show($file) { $this->file = $file; if(!is_file($this->path())) { exit("找不到对应的模板文件"); } $compile_file = $this->_arrayConfig['compile_dir']. md5($file). '.php'; $cache_file = $this->_arrayConfig['cache_dir']. md5($file). $this->_arrayConfig['suffix_cache']; // 如果需要重新编译文件 if($this->reCache($file) === false) { $this->_compileTool = new CompileClass($this->path(), $compile_file, $this->_arrayConfig); if($this->needCache()) { // 输出到缓冲区 ob_start(); } // 将赋值的变量导入当前符号表 extract($this->_value, EXTR_OVERWRITE); if(!is_file($compile_file) or filemtime($compile_file) < filemtime($this->path())) { $this->_compileTool->vars = $this->_value; $this->_compileTool->compile(); include($compile_file); } else { include($compile_file); } // 如果需要编译成静态文件 if($this->needCache() === true) { $message = ob_get_contents(); file_put_contents($cache_file, $message); } } else { readfile($cache_file); } }

在show方法中,我首先判断模板文件存在,然后利用MD5编码生成编译文件和缓存文件的文件名。然后就是判断是否需要进行编译,判断的依据是看编译文件是否存在和编译文件的写入时间是否小于模板文件。如果需要编译,就利用编译类进行编译,生成一个php文件。然后只需要include这个编译文件就好了。 

为了加快模板的载入,可以将编译后的文件输出到缓冲区中,也就是ob_start()这个函数,所有的输出将不会输出到浏览器,而是输出到默认的缓冲区,在利用ob_get_contents()将输出读取出来,保存成静态的html文件。 

具体的使用如下 

require('Template.php'); $config = array( 'debug' => true, 'cache_htm' => false, 'debug' => true ); $tpl = new Template($config); $tpl->assign('data', microtime(true)); $tpl->assign('vars', array(1,2,3)); $tpl->assign('title', "hhhh"); $tpl->show('test');  

缓存后的文件如下 

<!DOCTYPE html> <html> <head> <title>hhhh</title> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0"> </head> <body> 1466525760.32 <input value="1"> <input value="123123"> <input value="sdfsas是aa"> <input value="1"> <input value="2"> <input value="3"> <script src="123?t=1465898652"></script> </body> </html>

一个简单的自定义模板引擎就完成了,虽然简陋但是能用,而且重点在于造轮子的乐趣和收获。 
完整代码可见我的 github

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5615c7c88c8fbb8a46309a1b0afe9758.html