Smarty 在表格(table)里输出多列多行数据的方法

作者: Codebit     来源: Codebit.cn     时间: 2007-03-21 19:37:51
摘要: Smarty 是一个非常流行的 PHP 模板引擎,她支持缓存,能在实现 MVC 构架的同时,提高程序执行效率,深受众多 PHPer 的喜爱。Smarty 提供功能全面的模板语法,如果使用得当,你能很方便的实现你想要的显示方式。

本文讨论的是一个对初学者来说非常头痛的问题:将数据分成多列显示在表格中。单条数据循环对大多数模板引擎来说,实现都非常简单,但是要每行显示多条记录就需要一些额外的设置了。本文详细说明了解决这一问题的方法,相信对初学者非常有用。
归类: PHP/MySQL,

关键词: table, , , 表格, 缓存, 模板, smarty,


Smarty 是一个非常流行的 PHP 模板引擎,她支持缓存,能在实现 MVC 构架的同时,提高程序执行效率,深受众多 PHPer 的喜爱。Smarty 提供功能全面的模板语法,如果使用得当,你能很方便的实现你想要的显示方式。

本文讨论的是一个对初学者来说非常头痛的问题:将数据分成多列显示在表格中。单条数据循环对大多数模板引擎来说,实现都非常简单,但是要每行显示多条记录就需要一些额外的设置了。本文详细说明了解决这一问题的方法,相信对初学者非常有用。


模板文件:
HTML:
  1.  
  2. <table border="1">
  3. <tr>
  4.  
  5. <?section name=site loop=$siteList?>
  6.  
  7. <td><?$siteList[site].url?></td>
  8.  
  9. <?if $siteListColumn > 1 ?>
  10.  
  11. <?if $smarty.section.site.index != 0 && ($smarty.section.site.index + 1) % $siteListColumn == 0 ?>
  12. </tr>
  13. <tr>
  14. <?/if?>
  15.  
  16. <?else?>
  17. </tr>
  18. <tr>
  19. <?/if?>
  20.  
  21. <?/section?>
  22.  
  23. </tr>
  24. </table>
  25.  


注:示例中的模板定界符为 <??>


PHP 代码:
PHP:
  1.  
  2. <?php
  3.  
  4. // 说明:Smarty 在表格(table)里输出多列多行数据的方法
  5. // 站点:http://www.codebit.cn
  6.  
  7. // 设置列表内容
  8. $siteList = array(
  9. array('url'=>'http://www.codebit.cn'),
  10. array('url'=>'http://www.yitu.org'),
  11. array('url'=>'http://www.google.com'),
  12. array('url'=>'http://www.baidu.com'),
  13. array('url'=>'http://www.yahoo.com.cn'),
  14. array('url'=>'http://www.163.com'),
  15. array('url'=>'http://www.sohu.com'),
  16. array('url'=>'http://www.sina.com.cn'),
  17. );
  18.  
  19. // 列表数据统计
  20. $siteListCount = count($siteList);
  21.  
  22. // 显示列数
  23. $siteListColumn = 3;
  24.  
  25. // 如果列表数据不能将最后一行填满,
  26. // 如:共 8 条记录,每列 3 条记录,最后一行还差 1 条
  27. if($siteListColumn > 1 && $siteListCount % $siteListColumn != 0)
  28. {
  29. // 计算最后一行还差几列
  30. $emptyColumn = $siteListColumn - ($siteListCount % $siteListColumn);
  31.  
  32. for($i=0; $i<$emptyColumn; $i++)
  33. {
  34. // 用空值填充,保证最后一行正确显示
  35. $siteList[$siteListCount + $i] = array('url'=>'&nbsp;');
  36. }
  37. }
  38.  
  39. // 将显示列数赋值到模板
  40. $smarty->assign('siteListColumn', $siteListColumn);
  41.  
  42. // 将显示数据赋值到模板
  43. $smarty->assign('siteList', $siteList);
  44.  
  45. ?>
  46.  


此代码可以将指定数据显示在一个任意列(通过 $siteListColumn 设置)的表格中。



除了将数据显示在表格中,我们还有另外一个选择,那就是将数据显示在一个 UL 列表中,然后通过 CSS 控制 LI 的宽度,同样也能实现多列数据显示。这种方法在前台页面中也实现了数据和结构的分离,页面上只有数据,具体显示由 CSS 控制,这样,就实现了前台页面的 MVC 构架,好处多多。




推荐链接:(联系 QQ :326801485)