Linux 版 (精华区)

发信人: comer (新的希望), 信区: Linux
标  题: 模板,PHPLIB处理方式(二)
发信站: 大红花的国度 (Sat Jun  3 21:51:34 2000), 转信

发信人: chenhao (得做论文了,不做不行了), 信区: Linux
发信站: 北大未名 (Thu Jun  1 21:41:19 2000), 转信

   作者:David Orrd 译者:limodou
   嵌套的模板
     parse()函数的一个灵巧的特性是它创建的MyOutput句柄是一个真正的模板
   淞浚 拖髎ome_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():
   ----------------------------------------------------------------------
   ----------
   <?php
   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));
   ?>
   ----------------------------------------------------------------------
   ----------
   添加模板文本
     你可以给parse()和pparse()传递第三个参数,如果你想给模板变量追加数
   荻 皇翘婊凰?梢约虻
   的使用true作为第三个参数调用parse()和pparse(),如:
   ----------------------------------------------------------------------
   ----------
   <?php
   $t->parse("MyOutput","MyFileHandle", true);
   ?>
   ----------------------------------------------------------------------
   ----------
     如果MyOutput已经
   包含了数据,MyFileHandle将被分析并且被追加到MyOutput已经
   存在的数据上。这个
   技术非常有用,如果你已经
   有了一个模板,你想要同一段文本被重复多次,例如列出一个数据库查询结果中
   的多行。你也可能是显示数组中的变量,如下面的例子:
   ----------------------------------------------------------------------
   ----------
   <?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");?>---------------------------------------------------------
   -----------------------
     这个例子使用了两个模板,mainpage.ihtml和each_element.ihtml。mainpa
   ge.ihtml模板可能是这样:
   <HTML>
   Here is the array:
   <TABLE>
   {array_elements}
   </TABLE>
   </HTML>
     上面的{array_elements}标签将被each_element.ihtml的拷贝所替换,它将
   根据数组($myArray)进行重
   复。each_element.ihtml模板看上去可能是:
   <TR>
   <TD>{name}: {value}</TD>
   </TR>
     处理结果是一个包含$myArray元素的格式化很好的表格。但是如果将两个模
   板合并成一个模板不是更好
   吗?实际上,它们可以使用模板块来合并使用。模板块允许从一个模板中取出一
   块文本,所以你可以重复很
   多次,或者在它上面做任何你想做的事情。但是我将在另一篇文章讲述这个特性
   。

--
※ 修改:·comer 於 Jun  3 21:49:48 修改本文·[FROM: 202.118.224.2]
--
※ 转寄:·北大未名 BBS.PKU.EDU.CN·[FROM: 202.118.224.2]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: comer.bbs@s390.pku.e]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.504毫秒