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


<?php 
  $total = 21000; 
  $tpl->assign("total", $total); 
  $tpl->assign("format_total", number_format($total)); 
  ?> 



而 Smarty 的模版就可以这样写: (number_format 修饰函式请到Smarty 官方网页下载)
  
  <input name="total" type="hidden" value="<{$total}>" />
  
  总金额:<{$total|number_format:""}> 元
  Smarty 的 PHP 程序中只要这样写:



<?php 
  $total = 21000; 
  $tpl->assign("total", $total); 
  ?> 


所以在 Smarty 中我们只要指定一次变量,剩下的交给模版自行决定即可。这样了解了吗?这就是让模版自行决定变量呈现风貌的好处!
  
  控制模版的内容
  
  重复的区块
  
  在 Smarty 样板中,我们要重复一个区块有两种方式: foreach 及 section 。而在程序中我们则要 assign 一个数组,这个数组中可以包含数组数组。就像下面这个例子:
  
  首先我们来看 PHP 程序是如何写的:
  
  test2.php:


<?php 
  require "main.php"; 
  $array1 = array(1 => "苹果", 2 => "菠萝", 3 => "香蕉", 4 => "芭乐"); 
  $tpl->assign("array1", $array1); 
  $array2 = array( 
  array("index1" => "data1-1", "index2" => "data1-2", "index3" => "data1-3"), 
  array("index1" => "data2-1", "index2" => "data2-2", "index3" => "data2-3"), 
  array("index1" => "data3-1", "index2" => "data3-2", "index3" => "data3-3"), 
  array("index1" => "data4-1", "index2" => "data4-2", "index3" => "data4-3"), 
  array("index1" => "data5-1", "index2" => "data5-2", "index3" => "data5-3")); 
  $tpl->assign("array2", $array2); 
  $tpl->display("test2.htm"); 
  ?> 

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



  <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:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/12482a27b7aeccb8a7834d8fd7f09ea3.html