PHP 模板引擎: HTML_Template_IT
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();
如上图,可以看到blocklist,比如row块里面的cell块是用{__cell__}这种占位符号代替了。这个时候blockdata数组的内容是空的。解释模板时blockdata里的数据就会用blocklist的内容来生成。最后输出的内容就是blockdata里的内容。
parseCurrentBlock()解释之后,blockdata里就是解释后的数据,如图:
解释 (parse)
具体解释模板是如何实现的,可以看parse这个方法。有一个叫做blockinner的属性,是一个数组,数组里是块与它的子块的列表。解释的时候,利用了blockinner,用递归来完成解释的。比如,需要解释 row。如果 row 是有子块的,就先解释子块,然后把子块的占位替换成内容,最后替换变量。
广告内容为平台自动生成