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


<?php 
  require "main.php"; 
  // 先建立第一层数组 
  $category = array(); 
  $db->setSQL($SQL1, @#CATEGORY@#); 
  if (!$db->query(@#CATEGORY@#)) die($db->error()); 
  // 抓取第一层循环的资料 
  while ($item_category = $db->fetchAssoc(@#CATEGORY@#)) 
  { 
  // 建立第二层数组 
  $topic = array(); 
  $db->setSQL(sprintf($SQL2, $item_category[@#category_id@#]), @#TOPIC@#); 
  if (!$db->query(@#TOPIC@#)) die($db->error()); 
  // 抓取第二层循环的资料 
  while ($item_topic = $db->fetchAssoc(@#TOPIC@#)) 
  { 
  // 把抓取的数据推入第二层数组中 
  array_push($topic, $item_topic); 
  } 
  // 把第二层数组指定为第一层数组所抓取的数据中的一个成员 
  $item_category[@#topic@#] = $topic; 
  // 把第一层数据推入第一层数组中 
  array_push($category, $item_category); 
  } 
  $tpl->assign("forum", $category); 
  $tpl->display("test3.htm"); 
  ?> 

在数据库抓取一笔资料后,我们得到的是一个包含该笔数据的数组。透过 while 叙述及 array_push 函式,我们将数据库中的资料一笔一笔塞到数组里。如果您只用到单层循环,就把第二层循环 (红色的部份) 去掉即可。
  
  决定内容是否显示
  
  要决定是否显示内容,我们可以使用 if 这个语法来做选择。例如如果使用者已经登入的话,我们的模版就可以这样写:
  
  <{if $is_login == true}>
  显示使用者操作选单
  <{else}>
  显示输入帐号和密码的窗体
  <{/if}>
  
  要注意的是,「==」号两边一定要各留至少一个空格符,否则 Smarty 会无法解析。
  
  if 语法一般的应用可以参照官方使用说明,所以笔者在这里就不详加介绍了。不过笔者发现了一个有趣的应用:常常会看到程序里要产生这样的一个表格: (数字代表的是资料集的顺序)
  
  1 2
  
  3 4
  
  5 6
  
  7 8
  
  这个笔者称之为「横向重复表格」。它的特色和传统的纵向重复不同,前几节我们看到的重复表格都是从上而下,一列只有一笔资料。而横向重复表格则可以横向地在一列中产生 n 笔资料后,再换下一列,直到整个循环结束。要达到这样的功能,最简单的方式只需要 section 和 if 搭配即可。
  
  我们来看看下面这个例子:
  
  test4.php:
  


<?php 
  require "main.php"; 
  $my_array = array( 
  array("value" => "0"), 
  array("value" => "1"), 
  array("value" => "2"), 
  array("value" => "3"), 
  array("value" => "4"), 
  array("value" => "5"), 
  array("value" => "6"), 
  array("value" => "7"), 
  array("value" => "8"), 
  array("value" => "9")); 
  $tpl->assign("my_array", $my_array); 
  $tpl->display(@#test4.htm@#); 
  ?> 


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

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

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