如何控制Smarty模板引擎中foreach循环次数

时间:2015-09-17 ┊ 阅读:5,118 次 ┊ 标签: 开发 , 编程 , 设计

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 属性。

  1. foreach 演示:
/* 该例将输出数组 $custid 中的所有元素的值 */

{foreach  from=$custid item=curr_id} 

    id: {$curr_id}<br>
{/foreach} 

输出结果:

id: 1000
id: 1001
id: 1002

  1. 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

  1. 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>
  1. 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

......

  1. 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>
  1. 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}
  1. 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.
smarty.png

文章评论

添加新评论

温馨提醒:如果您是第一次在本站留言,需要审核后才能显示哦!

相关文章

ValueError: Error getting directory

ValueError: Error getting directory

ssl证书过期了 明明自动renew的 然后看log已经好久没更新成功了 查半天是当前server不信任远程连接 只能自己改代码 报错: 21-12-17 13:01:11 Generate CSR...amkevin.csr amkevin.csr generated. /home/www...
阅读全文>>
Introduction to ILE RPG Activation Groups

Introduction to ILE RPG Activation Groups

Learn how activation groups can help your ILE RPG programs run more efficiently, how to specify the type of group to use, and closing and reclaimin...
阅读全文>>
popup.js怎么和content.js通信?[JQuery]

popup.js怎么和content.js通信?[JQuery]

这两天为了实现一个谷歌浏览器插件功能,研究了半天怎么让插件来改特定网页里的特定字段的值,而这个值又来自popup的网页预先设定,下一步实现动态加载,可以让更多组实现便利。 目的很简单,我们有一个list,需要填到网页的某个字段,当然是好几个,这些值是设定好的,网页系统我们没法改,input想...
阅读全文>>
如何绕过登录抓取js动态加载网页数据[Python]

如何绕过登录抓取js动态加载网页数据[Python]

今天经历了一翻折腾,把一个需要登录网站并js动态加载的数据一一给抓下来了。 首先,登录时有cookie,我们需要把cookie保存下来,用urllib2构建request时加入header信息,这时还多了一点,虚构了浏览器信息,让服务器以为是正常的浏览器发起的请求,这样可以绕过简单的反爬虫策略...
阅读全文>>
终于用上了专业版的PyCharm含激活方法链接[Python]

终于用上了专业版的PyCharm含激活方法链接[Python]

就直接上图片吧: 激活方法链接:https://www.cnblogs.com/pupilheart/p/9734124.html
阅读全文>>