首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > PHP > 模板,PHPLIB处理方式(二)
【标  题】:模板,PHPLIB处理方式(二)
【关键字】:PHP,PL,PHPLIB
【来  源】:网络

模板,PHPLIB处理方式(二)

作者:David Orrd 译者:limodou

嵌套的模板
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():

--------------------------------------------------------------------------------
<?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。mainpage.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元素的格式化很好的表格。但是如果将两个模板合并成一个模板不是更好
吗?实际上,它们可以使用模板块来合并使用。模板块允许从一个模板中取出一块文本,所以你可以重复很
多次,或者在它上面做任何你想做的事情。但是我将在另一篇文章讲述这个特性。


上一页

转自PHPBuilder.com


文章评注

模板,PHPLIB处理方式(一):【上一篇】
PHP4的新特性:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 制作VB另类按钮
  • [讨论]上传文件放在哪里比较合适?
  • Linux势力增长惊人 迫使微软帝国出防守反击
  • page对象的心得
  • 备份和恢复IP地址(不用第三方工具)
  • 昨天又吃大餐了~~
  • 解决中毒造成启动电脑后看不见桌面 EXPORER.EXE惹的祸
  • Boot Sector结构、系统启动过程简介
  • 实现千万级数据分页的存储过程!《续》
  • ESFramework介绍之(35)―― IMessageTransceiver
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.