帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > PHP编程
模板,PHPLIB处理方式(二)
作者:匿名 发布时间:2002-12-21 来源:转自PHPBuilder.com
嵌套的模板

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

  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·动感首页更新实现之八 ------ 首  (2005-03-12)
 ·一个仿phplib的模板类  (2005-03-12)
 ·在PHP世界中选择最合适的模板--比  (2005-03-11)
 ·超越模板引擎  (2005-03-11)
 ·模板,PHPLIB处理方式(二)  (2005-03-11)
 ·模板,PHPLIB处理方式(一)  (2005-03-11)
 ·模板--为什么和如何在PHP中使用它  (2005-03-11)
 ·实例学习PHP之FastTemplate模板篇  (2005-03-11)
 ·用PHP制作静态网站的模板框架  (2005-03-11)
 ·PHP-Web应用程序开发:使用模板  (2005-03-11)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·Windows下集成安装Apache,PHP,MYSQ
·Mysql注入:SQL Injection with MyS
·PHP 的来龙去脉
·PHP 的功能概述
·PHP与其它CGI的比较
·PHP 的编译配置详细选项
·php.ini 配置详细选项
·如何写作PHP程序
·Hello,World
·嵌入方法
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统