您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

PHP中的模板技术

2025/9/19 14:47:07发布18次查看
综述:
在多人开发大型php项目时,模板技术非常有用,它可以分开美工和程序员的工作,并且方便界面的修改和完善;不仅如此,利用模板技术,我们还可以简单有效地定制或者修改站点。现在我们将要以phplib的模板为例子讲述如何在php中应用模板技术。
如何使用phplib模板?
设我们有一个模板, 名为usertemp,路径为/home/user_dir/user_temp/,它的内容如下:
你订购的是:{product}
大括号表示product是一个模板变量。
然后我们编写如下的程序:
<?php
include template.inc;
$user_product = 随身听;
$tmp = new template(/home/user_dir/user_temp/); // 创建一个名为 $t 的模板对象
$tmp->set_file(filehandle,usertemp.ihtml); // 设置句柄filehandle = 模板文件
$tmp->set_var(product,$user_product); // 设置模板变量product=$user_product
$tmp->parse(output,filehandle); // 设置模板变量 output = 分析后的文件
$tmp->p(output); // 输出 output 的值(我们的分析后的数据)
?>
template.inc是phplib中的一个文件,我们用include以便使用phplib的模板功能。phplib模板使用的是面向对象的设计,所以我们可以用$tmp = new template(/home/user_dir/user_temp/)创建一个模板对象,其参数是一个路径(/home/user_dir/user_temp/), 用来设置模板文件所在位置,默认路径是php脚本所在目录。
set_file()用来定义指向usertemp.ihtml(phplib模板的模板文件名的后缀为.ihtml )的句柄filehandle,set_var()用来设置模板变量product为$user_product的值(即随身听),parse()方法会装入filehandle(即usertemp.ihtml)进行分析,将所有在模板中出现的{product}替换成$user_product的值(随身听)。
如何使用嵌套的模板?
在上面的例子中,parse()方法设置的output是一个模板变量,利用这点,我们可以实现模板的嵌套。
比如,我们有另外一个模板(假设为usertemp2),其内容是:
欢迎你,亲爱的朋友!{output}
那么在分析之后,其输出会是:
欢迎你,亲爱的朋友!你订购的是:随身听
下面是更新后的程序:
<?php
include template.inc;
$user_product = 随身听;
$tmp = new template(/home/user_dir/user_temp/);
$tmp->set_file(filehandle,usertemp.ihtml);
$tmp->set_var(product,$user_product);
$tmp->parse(output,filehandle);
$tmp->set_file(filehandle2,usertemp2.ihtml);//设置第二个模板句柄
$tmp->parse(output,filehandle2);//分析第二个模板
$tmp->p(output);
?> 
很简单,我们就不详细解释了。这里有一个技巧:parse()和p()可以写成一个函数pparse(),比如$tmp->pparse(output,filehandle2)。
phplib模板如何接受多组值?
setfile()和set_var()的参数可以是关联数组(句柄作为数组索引,模板文件作为值),这样模板就可以接受多个值,比如:
<?php
……
$tmp->setfile(array(filehandle=>usertemp.ihtml,filehandle2=>usertemp2.ihtml));
$tmp->set_var(array(product=>随身听,product2=>电视机));
……
?> 
如何给模板变量追加数据?
我们可以给parse()和pparse()提供第三个参数(布尔变量)来给模板变量追加数据:
<?php
……
$tmp->pparse(output,filehandle,true);
……
?> 
这样,filehandle被分析后就会被追加到output变量的值的后面而不是简单的替换。
为什么要使用block机制?
比方说我们想要显示:
你订购的是:随身听 电视机,……
用上面的方法直接追加的话,可能显示出来的是:
你订购的是:随身听 你订购的是:电视机 你订购的是:……
显然不符合我们的要求,那么如何有效解决这个问题呢?这里就要使用block机制。
我们将上面的模板文件usertemp.ihtml修改一下:
你订购的是:
<!-- begin product_list -->
{product}
<!-- end product_list --> 
这样我们就定义了一个名为product_list的block。
相应的程序为:
<?php
include template.inc;
$tmp=new template(/home/user_dir/user_temp/);
$tmp->set_file(filehandle,usertemp.ihtml);
$tmp->set_block(filehandle,product_list,product_lists);
//将文件中的block替换成{product_lists}
$tmp->set_var(product,随身听);
$tmp->parse(product_lists,product_list,true);
$tmp->set_var(product,电视机);
$tmp->parse(product_lists,product_list,true);
//具体使用中,可以用数组和循环来做
$tmp->parse(output,filehandle);
$tmp->p(output);
?> 
现在的输出就是我们想要的结果了。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product