ecshop模板smarty foreach详解

ecshop源码分析:smarty模板类 花了差不多3天半的时间,终 阅读详情
ecshop模板smarty foreach详解 
{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}
{/foreach}

使用smarty模板模仿ecshop功能的程序(附开发手册详细) 这是我开发过的用smarty模板模仿ecshop功能开发的程序,使用时只需要导入数据库,修改配置文件即可,附带开发手册(详细),有什么不明白的直接加本人QQ:1094230936 立即下载

相关推荐

MT4-EA自动化交易研究笔记(2022-04-22)

自从接触到mt4的EA自动化交易,更让我这个10多年的老程序员看到了曙光,目前来看也确实出了一点成果,只是是否能稳定盈利有待时间的考验,所以开此专栏,一来做做记录与分析,更好的优化我的EA,二来也希望能与更多的高手交流,以完善我的交易系统

t35254056的博客 2291

ecshop模板循环foreach的使用方法及参数详解

ecshop模板中foreach使用规则,他有以下几个参数 from ,item name iteration index,下面我们一起来看它的用法。 1:foreach使用规则,他有以下几个参数 from ,item name iteration index   2:如何使用foreach循环   如果php要传递一个数组(如:$array)给ecshop的smarty模板.

Cleardandykao的博客 2766

C++cgal库配置+VS2017

Cgal几何图形库在VS2017上的下载、安装与配置。想要一口气下载完所有安装配件的,可以去文章末尾的链接。httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。

dsn3S的博客 1491

ecshop中,foreach遍历数据库中值,二维数组变一维数组

先把代码贴出来,大部分有注释if ($_REQUEST['act'] == 'list') { 检查权限 admin_priv('fanli2'); /* * $sp 售价 * $cp 成本价 * $cj 差价 * 计算冻结积分 * $frozenpay_points 个人冻结积分 *...

weixin_34018202的博客 214

Ubuntu下Vim创建属于自己的头部注释和代码模板

痛点 每次打开vim想写个C或者C++的程序都要把固定的模板敲一遍,是不是感觉非常的繁琐,能不能把Vim弄得像IDE那样新建一个文件直接生成对应的头部注释和代码模板,减少这些重复工作呢?下面我尽量详细的介绍实现的方法: 先看看新建文件后的效果 C语言格式效果 C++语言效果 方法: 使用命令 vi /etc/vim/vimrc 打开vimrc这个文件,然后复制以下代码至文件末尾的空白处即可! 修改vimrc文件里面的内容必须要用root管理员身份才能进行修改,修改时先切换至root身份即可。 "新建.

weixin_42137584的博客 1561

一文带你了解SOA接口测试

了解汽车电子行业的人,近几年可能经常见到一个词“SOA”,那SOA具体是什么?作为测试人员应该要测试哪些内容呢?这篇文章就简单给大家介绍一下。SOA(Service Oriented Architecture)是一种面向服务的架构,最早应用于IT行业,虽然行业内对于SOA的定义没有一个统一的描述,但是总体而言,SOA把功能定义成为服务,服务带有明确的可调用接口,并可以通过网络调用。在汽车领域,对于高性能计算平台而言,为了实现域控制器以及区域控制器之间的互联互通和软硬分离、缩短开发周期等优势,也引入了SOA的

怿星科技的博客 7156

ecshop中foreach的详细用法归纳

最近刚接触ecshop不久,感觉是非常的强大,做商城网站,整个流程都差不多搞好了,就是支付流程要自己完善完善,不过也有不足,文章功能还不够好。 通过几天的应用,总结出了ec模版中foreach的常见用法。 foreach 语法: 假如后台:$smarty->assign('test',$test); {foreach from=$test item=list ...

weixin_30657999的博客 185

基于单目视觉的四旋翼定点降落——如何通过mavros控制pixhawk(二)

    一直拖了这么久没有更新,怪我太懒啦~~~ 今天要特别感谢舒仔仔同学,我的好队友帮我写了这篇博文。这篇文章主要讲了如何通过mavros来控制pixhawk。硬件逻辑是这样子,我们先搞一个odroid(土豪上TX2),再用usb线将odroid与pixhawk连接。所以,odroid发送控制指令来控制pixhawk飞行。pixhawk与外界的通信协议是mavlink。ROS下面有个包叫mavr...

zhengyuxin0507的博客 1万+

ecshop foreach循环判断循环次数

首先要在foreach里面加上一个name属相,如:name=name如:<!-- {foreach from=$package_goods.goods_list item=goods_list name=name} --> 然后在里面判断:{$smarty.foreach.name.iteration}表示循环次数,再循环内会打印出:1,2,3,4,5等循环的次数{$smar...

weixin_30478619的博客 210

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 806

数字电视中的 Closed Caption (CC) 字幕标准协议

本文将详细介绍 DVB中的 CC 字幕标准协议,包括数据结构格式、字段定义、字段占用比特数以及字段用途。此外,本文还将举例说明如何从 TS 传输流中解析 CC 字幕信息,并组织打包到电视节目中进行显示。

以实战经验介绍行业知识 670

ECShop模板中smarty foreach标签详解

{foreach},{foreachelse} {foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标记必须与关闭标记{/foreach}成对出现。 属性 1、from    类型:array数组

tianshui121的专栏 611

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南/浙大/华科清华)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2646

ecshop模板的smarty foreach详解

{foreach},{foreachelse} {foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标记必须与关闭标记{/foreach}成对出现。 属性 1、from 类...

weixin_30793643的博客 85

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ecshop模板smarty foreach详解 [ECshop]

{foreach},{foreachelse}{foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比 {section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标记必须与关闭标记{/foreach}成对出现。属性1、from    类型:array数组 必要性:Ye

深度Java 3614

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ecshop模板中foreach的使用方法

1:foreach使用规则,他有以下几个参数 from ,item name iteration index        2:如何使用foreach循环 如果php要传递一个数组(如:$array)给ecshop的smarty模板.那么我们将通过from=$array 来接受,写法是{foreach from = $array item = item}        3:

zwfcan的专栏 3531

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ecshop 模板变量循环 foreach

ecshop是smarty的改版,删除了一些功能,比如模板中的四则运算被删除了,比如我们想通过运算得到循环的key+1这样是得不到他的值的,不过我们可以使用其他的方法来得到。 .iteration iteration contains the current loop iteration and always starts at one, unlike index It is inc

梦回故里 2306

ecshop二次开发必看的教程=====smarty --foreach详解(不错不错)

Smarty - Manua手册 - Chapter 7. Built-in Functions第7章 内建函数 - {foreach},{foreachelse}用于像访问序数数组一样访问关联数组 {foreach},{foreachelse} {foreach} is used to loop over an associative array as well a numerical

刘海闯的专栏 5486

ecshop模板标签的预定义变量

上一章节我们讲述了,ecshop模板之-lbi库文件分析 本章讲到这里,我们将结合ecshop模板常用的规则,来谈谈处理smarty开头的预定义变量的问题,只有掌握了处理smarty开头的预定义变量,我们才能很好的利用ecshop的smarty标签去调用一些数据。      1:ecshop模板中调用session的值      {$smarty.session.user_id}

zwfcan的专栏 2448
上一篇: 英语学习
下一篇: Query Tmpl详细讲解
lcathm
博客等级 码龄18年 37粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值