加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

[PHP]模板引擎Smarty深入浅出介绍

发布时间:2020-03-20 08:10:15 所属栏目:PHP教程 来源:互联网
导读:[PHP]模板引擎Smarty深入浅出介绍


  <html> 
  <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=big5"> 
  <title>测试重复区块</title> 
  </head> 
  <body> 
  <pre> 
  利用 foreach 来呈现 array1 
  <{foreach item=item1 from=$array1}> 
  <{$item1}> 
  <{/foreach}> 
  利用 section 来呈现 array1 
  <{section name=sec1 loop=$array1}> 
  <{$array1[sec1]}> 
  <{/section}> 
  利用 foreach 来呈现 array2 
  <{foreach item=index2 from=$array2}> 
  <{foreach key=key2 item=item2 from=$index2}> 
  <{$key2}>: <{$item2}> 
  <{/foreach}> 
  <{/foreach}> 
  利用 section 来呈现 array1 
  <{section name=sec2 loop=$array2}> 
  index1: <{$array2[sec2].index1}> 
  index2: <{$array2[sec2].index2}> 
  index3: <{$array2[sec2].index3}> 
  <{/section}> 
  </pre> 
  </body> 
  </html> 
   

执行上例后,我们发现不管是 foreach 或 section 两个执行结果是一样的。那么两者到底有何不同呢?
  
  第一个差别很明显,就是foreach 要以巢状处理的方式来呈现我们所 assign 的两层数组变量,而 section 则以「主数组[循环名称].子数组索引」即可将整个数组呈现出来。由此可知, Smarty 在模版中的 foreach 和 PHP 中的 foreach 是一样的;而 section 则是 Smarty 为了处理如上列的数组变量所发展出来的叙述。当然 section 的功能还不只如此,除了下一节所谈到的巢状资料呈现外,官方手册中也提供了好几个 section 的应用范例。
  
  不过要注意的是,丢给 section 的数组索引必须是从 0 开始的正整数,即 0, 1, 2, 3, ...。如果您的数组索引不是从 0 开始的正整数,那么就得改用 foreach 来呈现您的资料。您可以参考官方讨论区中的此篇讨论,其中探讨了 section 和 foreach 的用法。
  
  巢状资料的呈现
  
  模版引擎里最令人伤脑筋的大概就是巢状资料的呈现吧,许多著名的模版引擎都会特意强调这点,不过这对 Smarty 来说却是小儿科。
  
  最常见到的巢状资料,就算论譠程序中的讨论主题区吧。假设要呈现的结果如下:
  
  公告区
  
  站务公告
  
  文学专区
  
  好书介绍
  
  奇文共赏
  
  计算机专区
  
  硬件外围
  
  软件讨论
  
  程序中我们先以静态资料为例:
  
  test3.php:


<?php 
  require "main.php"; 
  $forum = array( 
  array("category_id" => 1, "category_name" => "公告区", 
  "topic" => array( 
  array("topic_id" => 1, "topic_name" => "站务公告") 
  ) 
  ), 
  array("category_id" => 2, "category_name" => "文学专区", 
  "topic" => array( 
  array("topic_id" => 2, "topic_name" => "好书介绍"), 
  array("topic_id" => 3, "topic_name" => "奇文共赏") 
  ) 
  ), 
  array("category_id" => 3, "category_name" => "计算机专区", 
  "topic" => array( 
  array("topic_id" => 4, "topic_name" => "硬件外围"), 
  array("topic_id" => 5, "topic_name" => "软件讨论") 
  ) 
  ) 
  ); 
  $tpl->assign("forum", $forum); 
  $tpl->display("test3.htm"); 
  ?> 

模版的写法如下:
  
  templates/test3.htm:



  <html> 
  <head> 
  <title>巢状循环测试</title> 
  </head> 
  <body> 
  <table width="200" border="0" align="center" cellpadding="3" cellspacing="0"> 
  <{section name=sec1 loop=$forum}> 
  <tr> 
  <td colspan="2"><{$forum[sec1].category_name}></td> 
  </tr> 
  <{section name=sec2 loop=$forum[sec1].topic}> 
  <tr> 
  <td width="25"> </td> 
  <td width="164"><{$forum[sec1].topic[sec2].topic_name}></td> 
  </tr> 
  <{/section}> 
  <{/section}> 
  </table> 
  </body> 
  </html> 
   

执行的结果就像笔者举的例子一样。
  
  因此呢,在程序中我们只要想办法把所要重复值一层一层的塞到数组中,再利用 <{第一层数组[循环1].第二层数组[循环2].第三层数组[循环3]. ... .数组索引}> 这样的方式来显示每一个巢状循环中的值。至于用什么方法呢?下一节使用数据库时我们再提。
  
  转换数据库中的资料
  
  上面提到如何显示巢状循环,而实际上应用时我们的资料可能是从数据库中抓取出来的,所以我们就得想办法把数据库的资料变成上述的多重数组的形式。这里笔者用一个 DB 类别来抓取数据库中的资料,您可以自行用您喜欢的方法。
  
  我们只修改 PHP 程序,模版还是上面那个 (这就是模版引擎的好处~),其中 $db 这个对象假设已经在 main.php 中建立好了,而且抓出来的资料就是上面的例子。
  
  test3.php:
  

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读