weixin

PHP 模板引擎: HTML_Template_IT

日期: January 14, 2019 分类: Web开发 作者:网站维护人员

PHP 模板引擎: HTML_Template_IT https://github.com/pear/HTML_Template_IT

本文不值得仔细阅读,很多内容是想到哪里写到哪里。

《PHP权威编程》介绍了这个模板引擎,看了源码的注释,大概是说这个模板引擎支持嵌套的块。

<html>
 <table border>
<!-- BEGIN row -->
  <tr>
<!-- BEGIN cell -->
   <td>
    {DATA}
   </td>
<!-- END cell -->
  </tr>
<!-- END row -->
 </table>
</html>

比如上面的模板里的<!--BEGIN/END -->用来表示块的开始和结尾。上面的row块就嵌套了cell块。{DATA}是要放入的数据的位置,DATA是变量的名字。

HTML_Template_IT这个类有两个属性 blockdata, blocklist,分别用来保存块的数据和块的列表。

$tpl = new HTML_Template_IT('./templates');
$tpl->loadTemplatefile('main.tpl.htm', true, true);
$tpl->setCurrentBlock('cell');
$tpl->setVariable('DATA', "data in cell");
$tpl->parseCurrentBlock();

比如上面的代码,先实例化一个模板类,然后载入模板文件,这个时候会初始化块的列表和块的数据。然后设置当前块,就是现在要处理的块,代码里设置的是叫做cell的块。设置变量DATA的值为“data in cell”。解释当前的块,也就是用变量的值“data in cell”替换块里的{DATA}。

用var_dump看一下blockdate和blocklist。

$tpl = new HTML_Template_IT('./templates');
$tpl->loadTemplatefile('main.tpl.htm', true, true);

$tpl->setCurrentBlock('row');
$tpl->setVariable('DATA', "data in cell");

var_dump($tpl->blocklist);
var_dump($tpl->blockdata);

$tpl->parseCurrentBlock();

blockdata0

如上图,可以看到blocklist,比如row块里面的cell块是用{__cell__}这种占位符号代替了。这个时候blockdata数组的内容是空的。解释模板时blockdata里的数据就会用blocklist的内容来生成。最后输出的内容就是blockdata里的内容。

parseCurrentBlock()解释之后,blockdata里就是解释后的数据,如图:

blockdate1

解释 (parse)

具体解释模板是如何实现的,可以看parse这个方法。有一个叫做blockinner的属性,是一个数组,数组里是块与它的子块的列表。解释的时候,利用了blockinner,用递归来完成解释的。比如,需要解释 row。如果 row 是有子块的,就先解释子块,然后把子块的占位替换成内容,最后替换变量。

blockinner

qq