phplib-template模板技术(转寄)



//由于某些原因,要暂时离开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 代码:
<?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%== 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

//更多内容请各位练习中研究。剧终
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值