0、开始
首先下载个template.php,网上很多, http://sourceforge.net/projects/phplib 上也有,其实一般下下来都是inc的后缀名,无所谓(个人习惯将其改为php的)
放到你网站的某个目录下,建议入门的时候给自己将点难度,就把它放到你做测试的目录中,直接require('template.php'); 这样至少可以排除路径出的错。
新建一个test.html文件(随便什么后缀名,但我一般是用dw做网页,还是htm、html好点)和一个test.php
1、最简单的例子——set_file, pparse
test.html里代码:
Hello world
test.php里如下:
一切正常的话,这时候你应该能看到浏览器输出: Hello world
//举这个最简单的例子仅仅是想让你快速跨进这个门槛,网上不少例子上来就长篇大论,感觉很难消化。一切正常,恭喜你!模板就是如此简单
2、解析变量——set_var
test.html里代码为:
{hi}
//hi就是要被解析的变量
test.php代码如下:
运行之,浏览器会输出:Hello world
更多例子自己多写些练习下
3、块!——set_block
块操作也是我接触的模板最高的一部分了,往上也没研究过... 不过我感觉,块用好了,99%的问题也能解决了(至少我现在还没碰到一个不能解决的问题)
block一般都是用在重复出现的地方,比如帖子栏目等等,以下以生成一个10行的表格为例。
3.1 块的定义
//blockname自行定义,"最好"不要重复(说“最好”的意思是可以重复,但此是后话);注:BEGIN END都必须用大写字母
3.2 一个最简单的表格:
因为我们要做个10行的表格,所以重复的block应该是<tr>...</tr>,因此定义如下:
//我定义的名字为list,个人习惯。
test.php代码如下:
运行之,一个10行的表格就出现了,10个hi
3.3 在block中定义变量,直接在里面写你要解析的变量myVar
test.php做如下修改:
运行之,一个10行的表格,里面的内容是从0-9:
0
1
2
3
4
5
6
7
8
9
块中可以有很多{变量},自己多多发挥吧
3.4 block的嵌套
block中可以有任何东西,自然其里面也可以有子block了,其实可以理解set_file('mbody'...) mbody就是一个大“block”。block嵌套可以很基本,我这里举个例子是通过一行一列的表格生成5行3列的表格,这样每行、每列都是一个block,列是行的子block。
3.4.1 定义嵌套block
test.html代码
//这里用tr、td命名block名纯属为了好理解
test.php中定义block
完整的test.php代码如下:
正常的情况输出为:
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
首先下载个template.php,网上很多, http://sourceforge.net/projects/phplib 上也有,其实一般下下来都是inc的后缀名,无所谓(个人习惯将其改为php的)
放到你网站的某个目录下,建议入门的时候给自己将点难度,就把它放到你做测试的目录中,直接require('template.php'); 这样至少可以排除路径出的错。
新建一个test.html文件(随便什么后缀名,但我一般是用dw做网页,还是htm、html好点)和一个test.php
1、最简单的例子——set_file, pparse
test.html里代码:
Hello world
test.php里如下:
PHP 代码:
<?php
//包含头文件
require('template.php');
//新建一个模板类并设置模板调用目录: ./ 表示就为当前目录
$t = new Template('./');
//调用test.html, 并将其命名为mbody
$t->set_file('mbody', 'test.html');
//pparse = parse + p 解析并输出mbody
$t->pparse('mout', 'mbody');
?>
//举这个最简单的例子仅仅是想让你快速跨进这个门槛,网上不少例子上来就长篇大论,感觉很难消化。一切正常,恭喜你!模板就是如此简单
2、解析变量——set_var
test.html里代码为:
{hi}
//hi就是要被解析的变量
test.php代码如下:
PHP 代码:
<?php
//包含头文件
require('template.php');
//设置模板调用目录: ./ 表示就为当前目录
$t = new Template('./');
//调用test.html, 并将其命名为mbody
$t->set_file('mbody', 'test.html');
//将hi解析为“Hello world”
$t->set_var('hi', 'Hello world');
//pparse = parse + p 解析并输出mbody
$t->pparse('mout', 'mbody');
?>
更多例子自己多写些练习下
3、块!——set_block
块操作也是我接触的模板最高的一部分了,往上也没研究过... 不过我感觉,块用好了,99%的问题也能解决了(至少我现在还没碰到一个不能解决的问题)
block一般都是用在重复出现的地方,比如帖子栏目等等,以下以生成一个10行的表格为例。
3.1 块的定义
代码:
<!-- BEGIN blockname --> ... <!-- END blockname -->
3.2 一个最简单的表格:
HTML 代码:
<table> <tr> <td>Hi</td> </tr> </table>
HTML 代码:
<table> <!-- BEGIN list --> <tr> <td>Hi</td> </tr> <!-- END list --> </table>
test.php代码如下:
PHP 代码:
<?php
//包含头文件
require('template.php');
//设置模板调用目录: ./ 表示就为当前目录
$t = new Template('./');
//调用test.html, 并将其命名为mbody
$t->set_file('mbody', 'test.html');
//定义一个mbody中的块list,命名为ml, 个人习惯,你定义为sm也没事 呵呵
$t->set_block('mbody', 'list', 'ml');
//解析10次这个块,就生成了10行表格。直观上相当于你把<tr>...</tr>“剪切”并粘贴了10次。剪切的意思是:你不解析的话这个“原始”块也就没了
for ($i = 0; $i < 10; $i++) {
//这里是parse, 只是解析,并不输出(具体为什么后面要加true,我也不清楚,还望高人指点)
$t->parse('ml', 'list', true);
}
//pparse = parse + p 解析并输出mbody
$t->pparse('mout', 'mbody');
?>
3.3 在block中定义变量,直接在里面写你要解析的变量myVar
HTML 代码:
<table> <!-- BEGIN list --> <tr> <td>{myVar}</td> </tr> <!-- END list --> </table>
PHP 代码:
for ($i = 0; $i < 10; $i++) {
//每次都给该块中的变量赋一次值
$t->set_var('myVar', $i);
$t->parse('ml', 'list', true);
}
0
1
2
3
4
5
6
7
8
9
块中可以有很多{变量},自己多多发挥吧
3.4 block的嵌套
block中可以有任何东西,自然其里面也可以有子block了,其实可以理解set_file('mbody'...) mbody就是一个大“block”。block嵌套可以很基本,我这里举个例子是通过一行一列的表格生成5行3列的表格,这样每行、每列都是一个block,列是行的子block。
3.4.1 定义嵌套block
test.html代码
HTML 代码:
<table> <!-- BEGIN tr --> <tr> <!-- BEGIN td --> <td>{myVar}</td> <!-- END td --> </tr> <!-- END tr --> </table>
test.php中定义block
PHP 代码:
//定义mbody中的block: tr, 命名为mtr
$t->set_block('mbody', 'tr', 'mtr');
//定义block中的子block: td, 命名为mtd
$t->set_block('tr', 'td', 'mtd');
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