综述: 在多人开发大型PHP项目时
![](/icons/48954dou.gif)
模板技术非常有用
![](/icons/48954dou.gif)
它可以分开美工和
![](/icons/48954chengxu.gif)
员
![](/icons/48954de.gif)
工作
![](/icons/48954dou.gif)
并且方便界面
![](/icons/48954de.gif)
修改和完善;不仅如此
![](/icons/48954dou.gif)
利用模板技术
![](/icons/48954dou.gif)
我们还可以简单有效地定制或者修改站点
![](/icons/48954dou2.gif)
现在我们将要以PHPLIB
![](/icons/48954de.gif)
模板为例子讲述如何在PHP中应用模板技术
如何使用PHPLIB模板? 设我们有
![](/icons/48954yi.gif)
个模板, 名为UserTemp
![](/icons/48954dou.gif)
路径为/home/user_dir/user_temp/
![](/icons/48954dou.gif)
它
![](/icons/48954de.gif)
内容如下:
你订购
![](/icons/48954de.gif)
是:{Product}
大括号表示Product是
![](/icons/48954yi.gif)
个模板变量
然后我们编写如下
![](/icons/48954de.gif)
![](/icons/48954chengxu.gif)
:
<?php
![](/icons/48954include.gif)
\"template.inc\";
$user_product = \"随身听\";
$tmp =
![](/icons/48954new.gif)
Template(\"/home/user_dir/user_temp/\"); // 创建
![](/icons/48954yi.gif)
个名为 $t
![](/icons/48954de.gif)
模板对象
$tmp->
![](/icons/48954set.gif)
_file(\"FileHandle\",\"UserTemp.ihtml\"); // 设置句柄FileHandle = 模板文件
$tmp->
![](/icons/48954set.gif)
_var(\"Product\",$user_product); // 设置模板变量Product=$user_product
$tmp->parse(\"Output\",\"FileHandle\"); // 设置模板变量 Output = 分析后
![](/icons/48954de.gif)
文件
$tmp->p(\"Output\"); // 输出 Output
![](/icons/48954de.gif)
值(我们
![](/icons/48954de.gif)
分析后
![](/icons/48954de.gif)
数据)
?>
template.inc是PHPLIB中
![](/icons/48954de.gif)
![](/icons/48954yi.gif)
个文件
![](/icons/48954dou.gif)
我们用
![](/icons/48954include.gif)
以便使用PHPLIB
![](/icons/48954de.gif)
模板功能
![](/icons/48954dou2.gif)
PHPLIB模板使用
![](/icons/48954de.gif)
是面向对象
![](/icons/48954de.gif)
设计
![](/icons/48954dou.gif)
所以我们可以用$tmp =
![](/icons/48954new.gif)
Template(\"/home/user_dir/user_temp/\")创建
![](/icons/48954yi.gif)
个模板对象
![](/icons/48954dou.gif)
其参数是
![](/icons/48954yi.gif)
个路径(\"/home/user_dir/user_temp/\")
![](/icons/48954dou.gif)
用来设置模板文件所在位置
![](/icons/48954dou.gif)
默认路径是PHP脚本所在目录
![](/icons/48954set.gif)
_file
![](/icons/48954kh.gif)
用来定义指向UserTemp.ihtml(PHPLIB模板
![](/icons/48954de.gif)
模板文件名
![](/icons/48954de.gif)
后缀为.ihtml )
![](/icons/48954de.gif)
句柄\"FileHandle\"
![](/icons/48954dou.gif)
![](/icons/48954set.gif)
_var
![](/icons/48954kh.gif)
用来设置模板变量Product为$user_product
![](/icons/48954de.gif)
值(即\"随身听\")
![](/icons/48954dou.gif)
parse
![](/icons/48954kh.gif)
思路方法会装入FileHandle(即UserTemp.ihtml)进行分析
![](/icons/48954dou.gif)
将所有在模板中出现
![](/icons/48954de.gif)
\"{Product}\"替换成$user_product
![](/icons/48954de.gif)
值(\"随身听\")
如何使用嵌套
模板? 在上面
![](/icons/48954de.gif)
例子中
![](/icons/48954dou.gif)
parse
![](/icons/48954kh.gif)
思路方法设置
![](/icons/48954de.gif)
\"Output\"是
![](/icons/48954yi.gif)
个模板变量
![](/icons/48954dou.gif)
利用这点
![](/icons/48954dou.gif)
我们可以实现模板
![](/icons/48954de.gif)
嵌套
比如
![](/icons/48954dou.gif)
我们有另外
![](/icons/48954yi.gif)
个模板(假设为UserTemp2)
![](/icons/48954dou.gif)
其内容是:
欢迎你
![](/icons/48954dou.gif)
亲爱
![](/icons/48954de.gif)
朋友!{Output}
那么在分析的后
![](/icons/48954dou.gif)
其输出会是:
欢迎你
![](/icons/48954dou.gif)
亲爱
![](/icons/48954de.gif)
朋友!你订购
![](/icons/48954de.gif)
是:随身听
下面是更新后
![](/icons/48954de.gif)
![](/icons/48954chengxu.gif)
:
<?php
![](/icons/48954include.gif)
\"template.inc\";
$user_product = \"随身听\";
$tmp =
![](/icons/48954new.gif)
Template(\"/home/user_dir/user_temp/\");
$tmp->
![](/icons/48954set.gif)
_file(\"FileHandle\",\"UserTemp.ihtml\");
$tmp->
![](/icons/48954set.gif)
_var(\"Product\",$user_product);
$tmp->parse(\"Output\",\"FileHandle\");
$tmp->
![](/icons/48954set.gif)
_file(\"FileHandle2\",\"UserTemp2.ihtml\");//设置第 2个模板句柄
$tmp->parse(\"Output\",\"FileHandle2\");//分析第 2个模板
$tmp->p(\"Output\");
?>
很简单
![](/icons/48954dou.gif)
我们就不详细解释了
![](/icons/48954dou2.gif)
这里有
![](/icons/48954yi.gif)
个窍门技巧:parse
![](/icons/48954kh.gif)
和p
![](/icons/48954kh.gif)
可以写成
![](/icons/48954yi.gif)
个
![](/icons/48954hanshu.gif)
pparse
![](/icons/48954kh.gif)
![](/icons/48954dou.gif)
比如$tmp->pparse(Output\",\"FileHandle2)
PHPLIB模板如何接受多组值?
![](/icons/48954set.gif)
file
![](/icons/48954kh.gif)
和
![](/icons/48954set.gif)
_var
![](/icons/48954kh.gif)
![](/icons/48954de.gif)
参数可以是关联
![](/icons/48954shuzu.gif)
(句柄作为
![](/icons/48954shuzu.gif)
索引
![](/icons/48954dou.gif)
模板文件作为值)
![](/icons/48954dou.gif)
这样模板就可以接受多个值
![](/icons/48954dou.gif)
比如:
<?php
……
$tmp->
![](/icons/48954set.gif)
file(
![](/icons/48954<img src=)
.gif' />(\"FileHandle\"=>\"UserTemp.ihtml\",\"FileHandle2\"=>\"UserTemp2.ihtml\"));
$tmp->
![](/icons/48954set.gif)
_var(
![](/icons/48954<img src=)
.gif' />(\"Product\"=>\"随身听\",\"Product2\"=>\"电视机\"));
……
?>
如何给模板变量追加数据? 我们可以给parse
![](/icons/48954kh.gif)
和pparse
![](/icons/48954kh.gif)
提供第 3个参数(布尔变量)来给模板变量追加数据:
<?php
……
$tmp->pparse(\"Output\",\"FileHandle\",true);
……
?>
这样
![](/icons/48954dou.gif)
FileHandle被分析后就会被追加到Output变量
![](/icons/48954de.gif)
值
![](/icons/48954de.gif)
后面而不是简单
![](/icons/48954de.gif)
替换
为什么要使用block机制? 比方说我们想要显示:
你订购
![](/icons/48954de.gif)
是:随身听 电视机
![](/icons/48954dou.gif)
……
用上面
![](/icons/48954de.gif)
思路方法直接追加
![](/icons/48954de.gif)
话
![](/icons/48954dou.gif)
可能显示出来
![](/icons/48954de.gif)
是:
你订购
![](/icons/48954de.gif)
是:随身听 你订购
![](/icons/48954de.gif)
是:电视机 你订购
![](/icons/48954de.gif)
是:……
显然不符合我们
![](/icons/48954de.gif)
要求
![](/icons/48954dou.gif)
那么如何有效解决这个问题呢?这里就要使用block机制
我们将上面
![](/icons/48954de.gif)
模板文件UserTemp.ihtml修改
![](/icons/48954yi.gif)
下:
你订购
![](/icons/48954de.gif)
是:
<!-- BEGIN Product_List -->
{Product}
<!-- END Product_List -->
这样我们就定义了
![](/icons/48954yi.gif)
个名为\"Product_List\"
![](/icons/48954de.gif)
block
相应
![](/icons/48954de.gif)
![](/icons/48954chengxu.gif)
为:
<?php
![](/icons/48954include.gif)
\"template.inc\";
$tmp=
![](/icons/48954new.gif)
Template(\"/home/user_dir/user_temp/\");
$tmp->
![](/icons/48954set.gif)
_file(\"FileHandle\",\"UserTemp.ihtml\");
$tmp->
![](/icons/48954set.gif)
_block(\"FileHandle\",\"Product_List\",\"Product_Lists\");
//将文件中
![](/icons/48954de.gif)
block替换成{Product_Lists}
$tmp->
![](/icons/48954set.gif)
_var(\"Product\",\"随身听\");
$tmp->parse(\"Product_Lists\",\"Product_List\",true);
$tmp->
![](/icons/48954set.gif)
_var(\"Product\",\"电视机\");
$tmp->parse(\"Product_Lists\",\"Product_List\",true);
//具体使用中
![](/icons/48954dou.gif)
可以用
![](/icons/48954shuzu.gif)
和循环来做
$tmp->parse(\"Output\",\"FileHandle\");
$tmp->p(\"Output\");
?>
现在
![](/icons/48954de.gif)
输出就是我们想要
![](/icons/48954de.gif)
结果了