如何控制Smarty模板引擎中foreach循环次数
时间:2015-09-17 ┊ 阅读:6,303 次 ┊ 标签: 开发 , 编程 , 设计
Smarty中的foreach标签
foreach 是除 section 之外处理循环的另一种方案(根据不同需要选择不同的方案)。 foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比 section 简单许多,缺点是只能处理简单数组。
foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性。
将 from 属性指定的数组中的数据遍历处理到 item 属性指定的变量中。
参考 foreach (array_expression as $key => $value)
from <=> array_expression;item <=> $value;key <=> $key。
name 属性可以任意指定(字母、数字和下划线的组合)。
foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一。
from 属性(通常是数组)决定循环的次数。
foreachelse 语句在 from 属性没有值的时候被执行。(from 属性所指定的值为空时,可用 foreachelse 语句指定——否则-执行什么,可用于数组为空时的异常处理)
foreach 循环有自己的变量名,使用该变量名可以访问该循环. 使用方法为 {$smarty.foreach.foreachname.varname},其中 foreachname 即在 foreach 中指定的 name 属性。
- foreach 演示:
/* 该例将输出数组 $custid 中的所有元素的值 */
{foreach from=$custid item=curr_id}
id: {$curr_id}<br>
{/foreach}
输出结果:
id: 1000
id: 1001
id: 1002
- foreach 键的演示和嵌套的演示
数组定义如下:
$smarty->assign("contacts",array(array("phone"=>"1","fax"=>"2","cell"=>"3"),
array("phone"=>"555-4444","fax"=>"555-3333","cell"=>"760-1234")));
/* 键就是数组的下标,请参看关于数组的解释 */
{foreach name=outer item=contact from=$contacts}
{foreach key=key item=item from=$contact}
{$key}: {$item}<br>
{/foreach}
{/foreach}
输出结果:
phone: 1
fax: 2
cell: 3
phone: 555-4444
fax: 555-3333
cell: 760-1234
- index索引
index 包含当前数组索引,注意是从"0"开始滴
例如:
<table>
{foreach from=$itemskey=myId item=i name=foo}
{if$smarty.foreach.foo.index %5==0} {*$smarty.foreach.foo.index 对 5 求余 *}
<tr><th>Title</th></tr>
{/if}
<tr><td>{$i.label}</td></tr>
{/foreach}
</table>
- iteration
iteration 包含当前循环的执行次数,总是从 1 开始,每执行一次自加 1。
例如:
{foreach from=$myArray item=i name=foo}
{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
{/foreach}
输出:
0|1
1|2
2|3
......
- first
当前 foreach 循环第一次执行时 first 被设置成 true。
例如:
/* 当循环第一次执行时显示 LATEST , 否则显示 id */
<table>
{foreach from=$itemskey=myId item=i name=foo}
<tr>
<td>{if$smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td>
<td>{$i.label}</td>
</tr>
{/foreach}
</table>
- last
当前 foreach 循环执行到最后一遍时 last 被设置成 true.
例如:
/* 在列表最后添加水平线 */
{foreach from=$itemskey=part_id item=prod name=products}
<a href="#{$part_id}">{$prod}</a>{if$smarty.foreach.products.last}<hr>{else},{/if}
{foreachelse}
... content ...
{/foreach}
- total
total 用于显示循环执行的次数,可以在循环中或循环执行后调用.
例如:
/* 在最后显示行数 */
{foreach from=$itemskey=part_id item=prod name=foo}
{$prod.label}<hr/>
{if$smarty.foreach.foo.last}
<div id="total">{$smarty.foreach.foo.total} items</div>
{/if}
{foreachelse}
... something else...
{/foreach}
注:Smarty是一个很著名的php模板引擎,易于展示(html/css)和程式逻辑的分离。这也意味着php代码是程式逻辑,而且和展示代码做到了分离, 使程序员专注逻辑实现,前端攻城獅专注于UI设计。
Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic. This implies that PHP code is application logic, and is separated from the presentation.