在Smarty模板中,可以使用forach和section两种方式重复一个区块。
foreach标记作用与PHP中的作用相同,但它们的使用语法大不相同。
在模板中{foreach}必须和{/foreach}成对使用,它有四个参数如下:
from:待循环数组的名称,决定循环的次数,必要参数。
item:确定当前元素的变量名称,必要参数。
key:当前处理元素的键名,可选参数。
name:循环的名称,用于访问循环,这个名称是任意的,可选参数。
在模板中可以嵌套使用foreach遍历二维数组,但是必须保证嵌套中的foreach名称唯一。
在使用foreach遍历数组时与下标无关,所以在模板中关联数组和索引数组都可以使用foreach遍历。
在Smarty模板中还为foreach标记提供了一个扩展标记foreachelse,这个语句在from变量没有值的时候被执行,一定要与foreach一起使用而且foreachelse没有结束标记,嵌套在foreach中。
实例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>
{* 简单变量*}
{$title}
</title>
</head>
<body>
<table>
{* 简单数组的遍历*}
{foreach from=$simpleArray item=v key=k}
<tr>
<td>
{$k}=>{$v},k + v = {$k + $v}
</td>
</tr>
{/foreach}
</table>
<table>
{* 二维数组(索引数组与关联数组混合)嵌套遍历*}
{foreach from=$complexArray item=row}
<tr>
{foreach from=$row item=col key=k}
{* 注意if语句与小括号(不是必须的)之间的空格,有严格的要求*}
<td {if ($col == 'wjj') }style='color:red;'{elseif ($col == 'qxy')}style='color:green;'{/if}>{$k}:{$col}</td>
{/foreach}
</tr>
{foreachelse}
<tr><td>没有数据啊</td></tr>
{/foreach}
{* 二维数组(索引数组与关联数组混合)遍历,注意关联数组的访问方式*}
{foreach from=$complexArray item=row}
<tr>
<td>name:{$row.name}</td>
<td>age:{$row.age}</td>
</tr>
{/foreach}
{* 索引数组与关联数组混合,注意访问方式*}
<tr>
<td>name:{$complexArray[0].name}</td>
<td>age:{$complexArray[0].age}</td>
</tr>
<tr>
<td>name:{$complexArray[1].name}</td>
<td>age:{$complexArray[1].age}</td>
</tr>
{* 数组(对象)嵌套遍历,注意:经过测试对象的属性必须是public*}
{foreach from=$objectArray item=row key=k}
<tr>
{foreach from=$row item=v key=k}
<td>{$k}:{$v}</td>
{/foreach}
</tr>
{/foreach}
{* 对象遍历,注意对象的访问方式*}
{foreach from=$objectArray item=row key=k}
<tr>
<td>name:{$row->name}</td>
<td>age:{$row->age}</td>
</tr>
{/foreach}
{* 索引数组与对象混合,注意访问方式*}
<tr>
<td>name:{$objectArray[0]->name}</td>
<td>name:{$objectArray[0]->age}</td>
</tr>
<tr>
<td>name:{$objectArray[1]->name}</td>
<td>name:{$objectArray[1]->age}</td>
</tr>
</table>
{* 引用子模板,子模板中有个$otherTpl变量*}
{include "example3.htm"}
</body>
</html>
程序为模板变量赋值为如下数组:
$p1 = new People('wjj','保密');
$p2 = new People('qxy','好像比我小');
array(
'title' => 'example2',
'simpleArray' => array(1,2,3,4,5,6),
'complexArray' => array(
array('name' => 'wjj','age' => '保密'),
array('name' => 'qxy','age' => '好像比我小')
),
'objectArray' => array($p1,$p2),
'otherTpl' => '我是:example3模板'
);
输出一个表格,内容如下:
0=>1,k + v = 1 |
1=>2,k + v = 3 |
2=>3,k + v = 5 |
3=>4,k + v = 7 |
4=>5,k + v = 9 |
5=>6,k + v = 11 |
name:wjj | age:保密 |
name:qxy | age:好像比我小 |
name:wjj | age:保密 |
name:qxy | age:好像比我小 |
name:wjj | age:保密 |
name:qxy | age:好像比我小 |
name:wjj | age:保密 |
name:qxy | age:好像比我小 |
name:wjj | age:保密 |
name:qxy | age:好像比我小 |
name:wjj | name:保密 |
name:qxy | name:好像比我小 |