{section}用来循环数据的数组,而{foreach}用来循环一个单一关联数组。每个{section}标记必须由配对的{/section}标记关闭。
属性名 | 类型 | 必需? | 缺省 | 描述 |
---|---|---|---|---|
name | string | Yes | n/a | 段落的名称 |
loop | mixed | Yes | n/a | 确定循环次数的值 |
start | integer | No | 0 | 循环开始时的索引位置。如果是赋值,那么开始位置是从数组的尾部开始计算。例如,如果循环数组里有七个值,而start为-2,那么开始的索引为5。不合法的值(取值超过了循环数组的长度)会自动被截取到最接近的合法值。 |
step | integer | No | 1 | step值用来在循环数组中遍历。例如,step=2将循环在索引0,2,4上。如果step为负值,循环从数组的结尾向前进行。 |
max | integer | No | n/a | 设置循环最多执行几次。 |
show | boolean | No | TRUE | 指定是否要显示本section |
必需的属性是name和loop。
{section}的name可以是任何内容,由字母、数字和下划线组成,和PHP变量一样。
段落可以嵌套,而嵌套{section}名称必需各自唯一。
在一个{section}中打印一个变量时,{section}的name必须出现在变量名旁边,并用[花括号]包围。
{sectionelse}将在loop变量中没有任何值的时候运行。
{section}也有自己的变量来处理{section}属性。这些属性的访问方式为:{$smarty.section.name.property},其中"name"是属性名。
{section}属性为index,index_prev,index_next,iteration,first,last,rownum,loop,show,total。
例子7-30. 用{section}循环一个简单数组 从PHP脚本中assign()一个数组给Smarty:
输出数组的模板:
上例将输出:
|
例子7-32. 命名一个{section} {section}的name可以是任何内容,参见PHP变量。它用来引用{section}中的数据。
|
例子7-34. 展示{section}的loop变量 本例中假定$custid,$name以及$address都是包含相同数量的值数组。首先PHP脚本将这些数组赋值给Smarty。
loop变量只是确定循环的次数。你可以在{section}里存取任何模板中的变量:
上例将输出:
|
例子7-35. 嵌套的{section} 段落可以嵌套,深度不限。通过嵌套段落,你可以存取非常复杂的数据结构,如多维数组等。下面的PHP脚本赋值数组给Smarty:
本模板中,$contact_type[customer]是当前客户的联系方法类型。
上例的输出为:
|
例子7-36. 带有{sectionelse}的数据库例子 数据库搜索的结果(ADODB或PEAR)传递给Smarty:
下面的模板将结果以HTML表格的方式输出:
|
index包含但前数组的索引,起始为0或者start 属性如果指定的话)。它每次循环增加1或者step值(如果指定的话)。
技术注解:如果不指定step和start属性,那么这个属性和iteration属性是一样的,只是它从0开始,而不是从1开始。
index_next是循环的下一个索引。在最后一次循环时,它比当前所以大1,当然要考虑step属性(如果指定的话)。
例子7-38. index,index_next和index_prev属性
下面的模板将上面的数组输出为表格:
上例会输出包含如下内容的表格:
|
iteration包含当前循环的循环次数,从1开始。
注意:和index属性不同,它不受{section}属性start,step和max的影响。iteration和index不同的是,它从1开始而不是从0开始。rownum是iteration的别名,它们是同一的。
例子7-39. section的iteration属性
每隔一个输出$arr元素的模板,因为step=2:
上例将输出:
下面是另一个例子,使用iteration属性每隔5行输出表格头,其中使用了{if}和取余运算:
|
last为真,当目前的{section}循环为最后一个时。
例子7-40. {section}属性:first和last 本例中,循环$customers数组,在第一个循环时输出头,最后一个循环时输出脚注。同时用到了total属性。
|
rownum包含的是当前循环次数,从1开始。它是iteration的别名,它们是一样的。
show可以作为section的参数。show是个布尔值。如果是FALSE,该段落不会被显示。此时如果有{sectionelse},将显示其内容。
例子7-42. show属性 布尔值$show_customer_info从PHP应用中传递,来控制是否显示本段落。
上例将显示:
|