摘要: Smarty 是一个非常流行的 PHP 模板引擎,她支持缓存,能在实现 MVC 构架的同时,提高程序执行效率,深受众多 PHPer 的喜爱。Smarty 提供功能全面的模板语法,如果使用得当,你能很方便的实现你想要的显示方式。
本文讨论的是一个对初学者来说非常头痛的问题:将数据分成多列显示在表格中。单条数据循环对大多数模板引擎来说,实现都非常简单,但是要每行显示多条记录就需要一些额外的设置了。本文详细说明了解决这一问题的方法,相信对初学者非常有用。
HTML:
<table border="1">
<tr>
<?section name=site loop=$siteList?>
<td><?$siteList[site].url?></td>
<?if $siteListColumn > 1 ?>
<?if $smarty.section.site.index != 0 && ($smarty.section.site.index + 1) % $siteListColumn == 0 ?>
</tr>
<tr>
<?/if?>
<?else?>
</tr>
<tr>
<?/if?>
<?/section?>
</tr>
</table>
php:
<?php // 说明:Smarty 在表格(table)里输出多列多行数据的方法 // 设置列表内容
$siteList = array(
array('url'=>'http://www.codebit.cn'),
array('url'=>'http://www.yitu.org'),
array('url'=>'http://www.google.com'),
array('url'=>'http://www.baidu.com'),
array('url'=>'http://www.yahoo.com.cn'),
array('url'=>'http://www.163.com'),
array('url'=>'http://www.sohu.com'),
array('url'=>'http://www.sina.com.cn'), ); // 列表数据统计
$siteListCount = count($siteList); // 显示列数
$siteListColumn = 3; // 如果列表数据不能将最后一行填满, // 如:共 8 条记录,每列 3 条记录,最后一行还差 1 条
if($siteListColumn > 1 && $siteListCount % $siteListColumn != 0) { // 计算最后一行还差几列 $emptyColumn = $siteListColumn - ($siteListCount % $siteListColumn);
for($i=0; $i<$emptyColumn; $i++) { // 用空值填充,保证最后一行正确显示
$siteList[$siteListCount + $i] = array('url'=>' ');
}
} // 将显示列数赋值到模板
$smarty->assign('siteListColumn', $siteListColumn); // 将显示数据赋值到模板
$smarty->assign('siteList', $siteList);
?>
此代码可以将指定数据显示在一个任意列(通过 $siteListColumn 设置)的表格中。
除了将数据显示在表格中,我们还有另外一个选择,那就是将数据显示在一个 UL 列表中,然后通过 CSS 控制 LI 的宽度,同样也能实现多列数据显示。这种方法在前台页面中也实现了数据和结构的分离,页面上只有数据,具体显示由 CSS 控制,这样,就实现了前台页面的 MVC 构架,好处多多。