首页 > 开发 > PHP > 正文

模板,PHPLIB处理方式(一)

2024-05-04 22:56:57
字体:
来源:转载
供稿:网友
如果你正想知道什么是模板,首先去看一下sascha schumann写的精彩文章《模板-为什么和如何在php3中使用它们(templates - why and how to use them in php3)》的前几段。

   一般来说,模板可以让你完全地把你的php代码从html中分离出来,这样使得html的图形设计者们非常高兴,而且可以避免他们搞丢你的宝贵设计。

它不是fasttemplates
  那么,我们真的需要在phpbuilder上关于模板的另一篇文章吗?好,是的,因为有不止一种的方法用php来实现模板。sascha的文章讲述了如何使用fasttemplates,但是php基本类库("phplib")有它自已的模板实
现。

  它们有什么不同呢?fasttemplates最初是从一个perl库转变来的。fasttemplates对perl程序工作的很好,但是对php不太理想。kristian koehntopp从头编写了phplib模板,作为一个纯的php库,它更好地提供了php的优势。好处之一是kristian的设计使用了preg_replace()来分析模板,据说比fasttemplate 中使用的ereg_replace()要快。phplib模板的另一个好处是它允许动态的块实现嵌套,不象fasttemplates。

  两个库都有着非常相似的特性和能力,但是如果你已经使用了fasttemplates,并且你想学习使用phplib模板,你应该把你所知道的关于fasttemplates 的一切都忘掉。他们的特性可能是相似的,但是phplib模板所做的每件事比fasttemplates只有一点点不同。

使用phplib模板
  让我们从一个简单的例子开始。我们假设在/home/mydir/mytemplates/下面有一个名为mytemplate的模板,它有一些文本,内容可能是:

祝贺!你赢了一辆{some_color}honda prelude!

  注意"{some_color}"是用大括号包围的。大括号指明some_color是一个模板变量。我们可能想写这样一个脚本,它可以装入模板,在{some_color}模板变量的地方插入php变量$my_color的值,然后输出新的文本。如果$my_color碰巧被设为"蓝色",最后的输出可能是:

祝贺!你赢了一辆新蓝色honda prelude!

下面是上述结果的php脚本: <?php
include "template.inc";

$my_color = "blue";
// 将在后面使用

$t = new template("/home/mydir/mytemplates/");
// 创建一个名为 $t 的模板对象

$t->set_file("myfilehandle","mytemplate.ihtml");
// 设置 myfilehandle = 我们的模板文件

$t->set_var("some_color",$my_color);
// 设置模板变量 some_color = $my_color值

$t->parse("myoutput","myfilehandle");
// 设置模板变量 myoutput = 分析后的文件

$t->p("myoutput");
// 输出 myoutput 的值(我们的分析后的数据)
?>
  第一行是一个include 指令,用来提供phplib模板功能。当然phplib做的比模板要多,但是如果你只想使用模板特性,只需要包括tmplate.inc (template.inc是来自于phplib的文件之一)。phplib模板使用面向对象程序设计,所以下一件事情就是创建一个模板对象。代码 <?php $t = new template (
"/home/mydir/mytemplates/" ); ?>
创建一个新的模板对象$t。这个$t对象是一个句柄,将用来处理所有的模板函数,用于php脚本中其它的代码。如果你愿意,你可能创建其它的模板对象(每一个都有着自已的模板变量名字空间),但是一个就够用了。在模板的构造函数调用中的路径("/home/mydir/mytemplates/")用来设置你的模板所在位置的根目录,但是如果你没有设它,它将缺省与你的php脚本所在目录一样。

  然后我们调用set_file()来定义一个名为"myfilehandle"的句柄来与mytemplate.ihtml链接(在parse()被调用之前,模板不会真正地装入)。顺便说一下,phplib模板的模板文件名的后缀为.ihtml 是一种习惯,你可以使用.html,.tpl,或其它的后缀。然后调用set_var()来设置模板变量some_color为$my_color的值(值为"蓝色"),意味着所有在模板中出现{some_color}的地方都将被词"蓝色"所替换,一旦我们调用了parse()。接着我们调用parse(),它会装入myfilehandle(mytemplate.ihtml)进行分析,并且替换所有模板变量("{某变量}")为模板变量的值,分析的结果放在myoutput中。任何结果都不会输出到web服务器上,除非 p("myoutput")被调用,它将输出最后分析过的文本。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表