如果你正想知道什么是模板,首先去看一下Sascha Schumann写的精彩文章《模板-为什么和如何在PHP3中使用它们(Templates - why and how to use them in PHP3)》的前几段。
一般来说,模板可以让你完全地把你的PHP代码从HTML中分离出来,这样使得HTML的图形设计者们非常高兴,而且可以避免他们搞丢你的宝贵设计。 它不是FastTemplates 它们有什么不同呢?FastTemplates最初是从一个Perl库转变来的。FastTemplates对Perl程序工作的很好,但是对PHP不太理想。Kristian Koehntopp从头编写了PHPLIB模板,作为一个纯的PHP库,它更好地提供了PHP的优势。好处之一是Kristian的设计使用了preg_replace()来分析模板,据说比FastTemplate 中使用的ereg_replace()要快。PHPLIB模板的另一个好处是它允许动态的块实现嵌套,不象FastTemplates。 两个库都有着非常相似的特性和能力,但是如果你已经使用了FastTemplates,并且你想学习使用PHPLIB模板,你应该把你所知道的关于FastTemplates 的一切都忘掉。他们的特性可能是相似的,但是PHPLIB模板所做的每件事比FastTemplates只有一点点不同。 使用PHPLIB模板 祝贺!你赢了一辆{some_color}Honda Prelude! 注意"{some_color}"是用大括号包围的。大括号指明some_color是一个模板变量。我们可能想写这样一个脚本,它可以装入模板,在{some_color}模板变量的地方插入PHP变量$my_color的值,然后输出新的文本。如果$my_color碰巧被设为"蓝色",最后的输出可能是: 祝贺!你赢了一辆新蓝色Honda Prelude! 下面是上述结果的PHP脚本: <?php $my_color = "blue"; $t = new Template("/home/mydir/mytemplates/"); $t->set_file("MyFileHandle","MyTemplate.ihtml"); $t->set_var("some_color",$my_color); $t->parse("MyOutput","MyFileHandle"); $t->p("MyOutput"); 然后我们调用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")被调用,它将输出最后分析过的文本。 嵌套的模板 parse()函数的一个灵巧的特性是它创建的MyOutput句柄是一个真正的模板变量,就象some_color 是一 对不起,你没赢。但是如果你赢了,我们将对你说: 并且在wholePage.ihtml被分析后,最后的结果将是: 对不起,你没赢。但是如果你赢了,我们将对你说: 下面是分析两个模板的PHP代码: <?php $t = new Template("/home/mydir/mytemplates/"); // 这三行同第一个例子一样 // 注意我们没有调用p() // 现在分析第二个模板 // wholePage.ihtml 有 "{MyOutput}" 在里面 // 所有的 {MyOutput} 被替换了 ?> pparse("MyFinalOutput","SecondHandle"); 你可以给parse()和pparse()传递第三个参数,如果你想给模板变量追加数据而不是替换它。可以简单的使用true作为第三个参数调用parse()和pparse(),如: <?php Here is the array: {array_elements} 上面的{array_elements}标签将被each_element.ihtml的拷贝所替换,它将根据数组($myArray)进行重复。each_element.ihtml模板看上去可能是: {name}: {value} 处理结果是一个包含$myArray元素的格式化很好的表格。但是如果将两个模板合并成一个模板不是更好吗?实际上,它们可以使用模板块来合并使用。模板块允许从一个模板中取出一块文本,所以你可以重复很多次,或者在它上面做任何你想做的事情。但是我将在另一篇文章讲述这个特性。 |