phplib-template模板技术(转寄)
2006-08-25 10:47
302 查看
//由于某些原因,要暂时离开php一段时间,最近在家休养中,顺便写些自己的学习心得与大家共享之
//发在新手答疑区,主要我感觉这里人气比较多,诚心希望能给各位网友带来需要的东西
//另外论坛不支持html代码,表格地方显示才有误。 可以到我的blog里面看“美观”版
自己并没有怎么仔细去看phplib模板的源文件,我这里用到的也就:set_file, set_block, set_var, parse, p, pparse等函数,仅以此文献给想入门phplib template的朋友。
//自己专业技术和写作都不咋地,所以我就用白话文给大家描述一下。以下template.php就指phplib的template.php,模板就指phplib的模版
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里如下:
PHP 代码:
一切正常的话,这时候你应该能看到浏览器输出: Hello world
//举这个最简单的例子仅仅是想让你快速跨进这个门槛,网上不少例子上来就长篇大论,感觉很难消化。一切正常,恭喜你!模板就是如此简单
2、解析变量——set_var
test.html里代码为:
{hi}
//hi就是要被解析的变量
test.php代码如下:
PHP 代码:
运行之,浏览器会输出:Hello world
更多例子自己多写些练习下
3、块!——set_block
块操作也是我接触的模板最高的一部分了,往上也没研究过... 不过我感觉,块用好了,99%的问题也能解决了(至少我现在还没碰到一个不能解决的问题)
block一般都是用在重复出现的地方,比如帖子栏目等等,以下以生成一个10行的表格为例。
3.1 块的定义
代码:
//blockname自行定义,"最好"不要重复(说“最好”的意思是可以重复,但此是后话);注:BEGIN END都必须用大写字母
3.2 一个最简单的表格:
HTML 代码:
因为我们要做个10行的表格,所以重复的block应该是<tr>...</tr>,因此定义如下:
HTML 代码:
//我定义的名字为list,个人习惯。
test.php代码如下:
PHP 代码:
运行之,一个10行的表格就出现了,10个hi
3.3 在block中定义变量,直接在里面写你要解析的变量myVar
HTML 代码:
test.php做如下修改:
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代码
HTML 代码:
//这里用tr、td命名block名纯属为了好理解
test.php中定义block
PHP 代码:
完整的test.php代码如下:
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
//更多内容请各位练习中研究。剧终
//发在新手答疑区,主要我感觉这里人气比较多,诚心希望能给各位网友带来需要的东西
//另外论坛不支持html代码,表格地方显示才有误。 可以到我的blog里面看“美观”版
自己并没有怎么仔细去看phplib模板的源文件,我这里用到的也就:set_file, set_block, set_var, parse, p, pparse等函数,仅以此文献给想入门phplib template的朋友。
//自己专业技术和写作都不咋地,所以我就用白话文给大家描述一下。以下template.php就指phplib的template.php,模板就指phplib的模版
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里如下:
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'); ?>
一切正常的话,这时候你应该能看到浏览器输出: Hello world
//举这个最简单的例子仅仅是想让你快速跨进这个门槛,网上不少例子上来就长篇大论,感觉很难消化。一切正常,恭喜你!模板就是如此简单
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'); ?>
运行之,浏览器会输出:Hello world
更多例子自己多写些练习下
3、块!——set_block
块操作也是我接触的模板最高的一部分了,往上也没研究过... 不过我感觉,块用好了,99%的问题也能解决了(至少我现在还没碰到一个不能解决的问题)
block一般都是用在重复出现的地方,比如帖子栏目等等,以下以生成一个10行的表格为例。
3.1 块的定义
代码:
<!-- BEGIN blockname --> ... <!-- END blockname -->
//blockname自行定义,"最好"不要重复(说“最好”的意思是可以重复,但此是后话);注:BEGIN END都必须用大写字母
3.2 一个最简单的表格:
HTML 代码:
<table> <tr> <td>Hi</td> </tr> </table>
因为我们要做个10行的表格,所以重复的block应该是<tr>...</tr>,因此定义如下:
HTML 代码:
<table> <!-- BEGIN list --> <tr> <td>Hi</td> </tr> <!-- END list --> </table>
//我定义的名字为list,个人习惯。
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'); ?>
运行之,一个10行的表格就出现了,10个hi
3.3 在block中定义变量,直接在里面写你要解析的变量myVar
HTML 代码:
<table> <!-- BEGIN list --> <tr> <td>{myVar}</td> </tr> <!-- END list --> </table>
test.php做如下修改:
PHP 代码:
for ($i = 0; $i < 10; $i++) { //每次都给该块中的变量赋一次值 $t->set_var('myVar', $i); $t->parse('ml', 'list', true); }
运行之,一个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代码
HTML 代码:
<table> <!-- BEGIN tr --> <tr> <!-- BEGIN td --> <td>{myVar}</td> <!-- END td --> </tr> <!-- END tr --> </table>
//这里用tr、td命名block名纯属为了好理解
test.php中定义block
PHP 代码:
//定义mbody中的block: tr, 命名为mtr $t->set_block('mbody', 'tr', 'mtr'); //定义block中的子block: td, 命名为mtd $t->set_block('tr', 'td', 'mtd');
完整的test.php代码如下:
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
//更多内容请各位练习中研究。剧终
相关文章推荐
- PHPLIB Template入门系列 - 4 模板嵌套- -(转寄)
- PHPLIB Template入门系列 -2 开始你的第一个应用(转寄)
- PHPLIB Template入门系列 - 3 块的应用 (转寄)
- StringTemplate.net模板技术用法
- JS之模板技术(aui / artTemplate)
- JS之模板技术(aui / artTemplate)
- 在PHP世界中选择最合适的模板--比较PHPLIB Template和FastTemplate
- 模板Trait 技术与简述template 元编程
- 选择最合适的模板--比较PHPLIB Template和FastTemplate
- StringTemplate.net模板技术用法
- JS之模板技术(aui / artTemplate)
- PHPLIB Template入门系列 - 1 简介(转寄)
- PHPLIB Template入门系列 - 4 模板嵌套-
- 微软.NET技术实践 ORM开发系列文章汇总 智能提示的模板编辑器Template Studio 和 查询追踪器 LLBL Gen Profiler
- artTemplate模板引擎
- 设计模式--模板方法模式Template
- C++类模板template
- 模板技术
- 【寒江雪】模板技术
- spring技术内幕13-SqlMapClientTemplate对Ibatis的封装