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

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

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

模板文件:

 
<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)里输出多列多行数据的方法
// 站点:http://www.codebit.cn
 
// 设置列表内容
$siteList = array(
	array('url'=>'http://www.codebit.cn'),
	array('url'=>'http://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'=>'&nbsp;');
	}
}
 
// 将显示列数赋值到模板
$smarty->assign('siteListColumn', $siteListColumn);
 
// 将显示数据赋值到模板
$smarty->assign('siteList', $siteList);
 
?>

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>