ECShop 模板标签 smarty foreach详解
2016-07-07 16:46 来源:www.chinab4c.com 作者:ecshop专家
{foreach},{foreachelse} {foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标记必须与关闭标记{/foreach}成对出现。 属性 1、from 类型:array数组 必要性:Yes必要 默认值:n/a 描述:循环访问的数组 2、item类型:string字符串必要性:Yes必要默认值:n/a描述:当前元素的变量名 3、key类型:string字符串必要性:No可选默认值:n/a描述:当前键名的变量名 4、name类型:string字符串必要性:No可选默认值:n/a描述:用于访问foreach属性的foreach循环的名称 from和item是必要属性 {foreach}循环的name可以是任何字母,数组,下划线的组合,参考PHP变量。 {foreach}循环可以嵌套,嵌套的{foreach}的名称应当互不相同。 from属性通常是值数组,被用于判断{foreach}的循环次数。 在from变量中没有值时,将执行{foreachelse}。 {foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其中"name"是name属性。 注意:name属性仅在需要访问{foreach}属性时有效,与{section}不同。访问未定义name的{foreach}属性不会抛出一个错误,但将导致不可预知的结果。 {foreach}属性有index, iteration, first, last, show, total. 示例: 例一. item属性 <?php $arr = array(1000, 1001, 1002); $smarty->assign('myArray', $arr); ?> 用模板以无序列表输出$myArray <ul> {foreach from=$myArray item=foo} <li>{$foo}</li> {/foreach} </ul> 上例将输出: <ul> <li>1000</li> <li>1001</li> <li>1002</li> </ul> 例二. 演示item和key属性 <?php $arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding'); $smarty->assign('myArray', $arr); ?> 用模板按键名/键值对的形式输出$myArray, 类似于PHP的foreach。 <ul> {foreach from=$myArray key=k item=v} <li>{$k}: {$v}</li> {/foreach} </ul> 上例将输出: <ul> <li>9: Tennis</li> <li>3: Swimming</li> <li>8: Coding</li> </ul> 例三. {foreach}的item属性是关联数组 <?php $items_list = array(23 => array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') ); $smarty->assign('items', $items_list); ?> 模板中,url通过$myId输出$items <ul> {foreach from=$items key=myId item=i} <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li> {/foreach} </ul> 上例将输出: <ul> <li><a href="item.php?id=23">2456: Salad</li> <li><a href="item.php?id=96">4889: Cream</li> </ul> 例四. {foreach}使用嵌套的item和key 向Smarty设置一个数组,对于每个键名对应的每个循环值都包括键。 <?php $smarty->assign('contacts', array( array('phone' => '1', 'fax' => '2', 'cell' => '3'), array('phone' => '555-4444', 'fax' => '555-3333', 'cell' => '760-1234') )); ?> 用于输出$contact的模板。 {foreach name=outer item=contact from=$contacts} <hr /> {foreach key=key item=item from=$contact} {$key}: {$item}<br /> {/foreach} {/foreach} 上例将输出: <hr /> phone: 1<br /> fax: 2<br /> cell: 3<br /> <hr /> phone: 555-4444<br /> fax: 555-3333<br /> cell: 760-1234<br /> 例五. 使用{foreachelse}的数据库示例 一个数据库(例如PEAR或ADODB)的搜索脚本示例, <?php $search_condition = "where name like '$foo%' "; $sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name'; $smarty->assign('results', $db->getAssoc($sql) ); ?> 借助{foreachelse}标记在没有结果时模板输出"None found"字样。 {foreach key=cid item=con from=$results} <a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br /> {foreachelse} No items were found in the search {/foreach} .index包含当前数组索引,从零开始。 例六. index示例 {* 每五行输出一次头部区块 *} <table> {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} <tr><th>Title</th></tr> {/if} <tr><td>{$i.label}</td></tr> {/foreach} </table> iteration包含当前循环次数,与index不同,从1开始,每次循环增长1。 例七. iteration和index示例 {* this will output 0|1, 1|2, 2|3, ... etc *} {* 该例将输出0|1, 1|2, 2|3, ... 等等 *} {foreach from=$myArray item=i name=foo} {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}, {/foreach} first在当前{foreach}循环处于初始位置时值为TRUE。 例八. first属性示例 {* 对于第一个条目显示LATEST而不是id *} <table> {foreach from=$items key=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}循环处于最终位置是值为TRUE。 例九. last属性示例 {* 在列表结束时增加一个水平标记 *}) {foreach from=$items key=part_id item=prod name=products} <a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if} {foreachelse} ... content ... {/foreach} show是{foreach}的参数. show是一个布尔值。如果值为FALSE,{foreach}将不被显示。如果有对应的{foreachelse},将被显示。 total包括{foreach}将循环的次数,既可以在{foreach}中使用,也可以在之后使用。 例十. total属性示例 {* 在结束位置显示行数 *} {foreach from=$items key=part_id item=prod name=foo} {$prod.name><hr/> {if $smarty.foreach.foo.last} <div id="total">{$smarty.foreach.foo.total} items</div> {/if} {foreachelse} ... something else ... {/foreach} 问题 {foreach from=$custid item=curr_id key=num} {if num is odd} 干啥 {else} 干其他的 {/if} {/foreach} 与以下的代码的区别,odd和enen的意义? {foreach from=$custid item=curr_id key=num} {if num%2==0} 干啥 {else} 干其他的 {/if} |
回答:
干其他的 |
恩恩,不错,学习 |
最近更新
常用插件
- ecshop 手机注册验证插件
ecshop 手机注册验证插件 ,需要通过手机获短信,然后注册验证 价格:...
- ecshop根据订单批量发红包
ecshop根据订单批量发红包 ,大家肯定对ecshop红包不陌生,但是对ecshop订...
- ecshop中nginx实现url的重写
上几章为了让ecshop很好的在nginx上运行。我们搭配了ecshop的nginx下的工作...
- ecshop商品分类名称增加样
ecshop插件介绍:本插件可以方便在后台管理,为ecshop商品分类名称增加样...
- ecshop使用手机验证码登陆
ecshop使用手机验证码登陆,这个功能很新颖,有些特殊的ecshop站点,他到...
ecshop热门问答
ecshop热门资料
ecshop每次处理记录个数
ecshop玉米
ecshop图书网
ecshop新安
ecshop登录淘宝
ecshopEC功能
ecshop开发商
ecshop商家备注
ecshop热销商品
ecshop图片滚动
ecshopiframe
ecshopEnTemplate
ecshop隐秘
ecshop技巧
ecshop大学城
ecshop显示站内咨询
ecshop幫助
ecshoppermission denied
ecshopECMALL人人一键登录
ecshop快递单号
ecshop组成
ecshop517
ecshop昵称
ecshop海尔
ecshop预定
ecshop图片本地化
ecshop批量导入商品属性
ecshopLive
ecshopcorrect
ecshop农行