来源: http://www.x2blog.cn/maxwin/7311.html
test.html代码
<table>
<!-- BEGIN tr -->
<tr>
<!-- BEGIN td -->
<td>{myVar}</td>
<!-- END td -->
</tr>
<!-- END tr -->
</table>
//这里用tr、td命名block名纯属为了好理解
test.php中定义block
//定义mbody中的block: tr, 命名为mtr
$t->set_block('mbody', 'tr', 'mtr');
//定义block中的子block: td, 命名为mtd
$t->set_block('tr', 'td', 'mtd');
完整的test.php代码如下:
<?php
//包含头文件
require('template.php');
//设置模板调用目录: ./ 表示就为当前目录
$t = new Template('./');
//调用test.html, 并将其命名为mbody
$t->set_file('mbody', 'test.html');
//定义mbody中的block: tr, 命名为mtr
$t->set_block('mbody', 'tr', 'mtr');
//定义block中的子block: td, 命名为mtd
$t->set_block('tr', 'td', 'mtd');
//0-14 共15个数字分别填在表格中
for ($i = 0; $i < 15; $i++) {
$t->set_var('myVar', $i);
//每次都要生成一列,所以每次解析一次td
$t->parse('mtd', 'td', true);
//当到达3列是就要换行了,解析一次tr
if ($i%3 == 2) { //这个是换行的条件
$t->parse('mtr', 'tr', true);
//以下这个请注意: 将mtd的值置空。
//这里是个人理解,可能不太准确:因为每次解析td都相当于 mtd += td, 即每次都是把生成的td内容加到mtd后面,当对tr解析时就将其子block生成的所有内容解析为自己的。因此当一行完成时改行所有td都在mtd里面,如果不将mtd置空,下一行的td内容仍然在其基础上增加,就会出现(*1)的情况
$t->set_var('mtd', '');
}
}
//pparse = parse + p 解析并输出mbody
$t->pparse('mout', 'mbody');
?>
正常的情况输出为:
0 | 1 | 2 |
3 | 4 | 5 |
6 | 7 | 8 |
9 | 10 | 11 |
12 | 13 | 14 |
异常情况:没有将mtd置空的情况(*1)
0 | 1 | 2 | ||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | |||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |