嵌套的模板
parse()函数的一个灵巧的特性是它创建的MyOutput句柄是一个真正的模板变量,就象some_color 是一
个模板变量。所以如果你有另一个模板,它有一个{MyOutput}标签,当你分析第二个模板时,所有的
{MyOutput}标记将被替换为MyOutput中的分析后的文本。这个特性允许你将一个模板文件嵌入到另一个模板
中。所以,我们可能有另一个名为wholePage.ihtml的模板,内容如下:
对不起,你没赢。但是如果你赢了,我们将对你说:
{MyOutput}
并且在wholePage.ihtml被分析后,最后的结果将是:
对不起,你没赢。但是如果你赢了,我们将对你说:
祝贺!你赢了一辆新蓝色Honda Prelude!
下面是分析两个模板的PHP代码:
<?php
$t = new Template("/home/mydir/mytemplates/");
// 这三行同第一个例子一样
$t->set_file("MyFileHandle","MyTemplate.ihtml");
$t->set_var("some_color",$my_color);
$t->parse("MyOutput","MyFileHandle");
// 注意我们没有调用p()
// 这里,仍然没有输出任何东西
// 现在分析第二个模板
$t->set_file("WholeHandle","wholePage.ihtml");
// wholePage.ihtml 有 "{MyOutput}" 在里面
$t->parse("MyFinalOutput","WholeHandle");
// 所有的 {MyOutput} 被替换了
$t->p("MyFinalOutput");
// 输出 MyFinalOutput 的值
?>
最后调用了parse()和p()的两行语句可以合并成一个简写函数pparse():
pparse("MyFinalOutput","SecondHandle");
另一个PHPLIB模板的特性是set_file()和set_var()函数也能一次接收多组值,通过传递一个句柄/数组<?php
$t->set_file(array( "pageOneHandle" => "pageone.ihtml",
"pageTwoHandle" => "pagetwo.ihtml"));
$t->set_var(array( "last_name" => "Gates",
"first_name" => "Bill",
"net_worth" => $reallybignumber));
?>
<?php
$t->parse("MyOutput","MyFileHandle", true);
?>
<?php
$t = new Template("/home/mydir/mytemplates/"); $t->set_file(array("mainpage" => "mainpage.ihtml", "each_element" => "each_element.ihtml"));reset($myArray);while (list($elementName, $elementValue) = each($myArray)) {
// 设置 'value' 和 'name' 为每一个元素的值和名字
$t->set_var("name",$elementName); $t->set_var("value",$elementValue);
// 追加each_element的拷贝
$t->parse("array_elements","each_element",true);}$t->pparse("output","mainpage");?>