PHP模板引擎Smarty内建函数section,sectionelse用法详解
本文实例讲述了PHP模板引擎Smarty内建函数section,sectionelse用法。分享给大家供大家参考,具体如下:
section 是 Smarty 模板中除了 foreach 以外的另一种处理循环的方案,section 比 foreach 要灵活,就像是一个改进的 foreach 语句,除了拥有相同的循环特性外,还提供了很多附加选项,可以更好的控制循环的执行。在模板中,必须使用成对的 section 标记,有两个必须设置的属性 name 和 loop ,关于 section 的属性请看下表:
| 属性 | 类型 | 是否必须 | 缺省值 | 描述 | 
|---|---|---|---|---|
| name | string | Yes | n/a | 该循环的名称 | 
| loop | [$variable_name] | Yes | n/a | 决定循环次数的变量名称 | 
| start | integer | No | 0 | 循环执行的初始位置. 如果该值为负数,开始位置从数组的尾部算起. 例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5. 非法值(超过了循环数组的下限)将被自动调整为最接近的合法值. | 
| step | integer | No | 1 | 该值决定循环的步长. 例如指定step=2将只遍历下标为0、2、4等的元素. 如果step为负值,那么遍历数组的时候从后向前遍历. | 
| max | integer | No | 1 | 设定循环最大执行次数. | 
| show | boolean | No | true | 决定是否显示该循环. | 
我们通过一个实例,来演示 Smarty 中 {section} 和 {sectionelse} 的使用。
实例思路:从数据库中取出内容,赋给一个数组变量 $_html ,再给这个数组变量分配给模板,然后在模板中进行该数组的遍历。
数据库、主文件 index.php,Smarty 模板初始化文件 init.inc.php,可参考前面一篇《PHP模板引擎Smarty内建函数foreach,foreachelse用法分析》
/tpl/index.tpl
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
 | 
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>section,sectionelse</title></head><body> <table align="center" border="1" width="800">  <tr>   <th>编号(iteration)</th>   <th>编号(rownum)</th>   <th>姓名</th>   <th>电子邮件</th>   <th>添加时间</th>  </tr>  <{section loop=$data name="ls" max="100" start="0" step="2" }> <!-- 使用 section 遍历数组 $data,max 表示最多可以循环多少条,start 表示从哪个数组下标开始显示,step决定了循环的步长,如果设置为2,那么将遍历下标为0,2,4……的元素 -->  <!-- 在此,我们做几个保留变量 $smarty.section 的操作 -->    <!-- 当数据显示第一条的时候,第一行的表格背景为黄色,使用属性:first -->    <!-- 当数据显示最后一条的时候,最后一行的表格背景为蓝色,使用属性:last -->  <{if $smarty.section.ls.first}>  <tr align="center" bgcolor="#FFFF00">  <{elseif $smarty.section.ls.last}>  <tr align="center" bgcolor="#0000FF">  <{else}>  <tr align="center">  <{/if}>   <td><{$smarty.section.ls.iteration}></td> <!-- iteration 是保留变量中显示行号的属性 -->   <td><{$smarty.section.ls.rownum}></td> <!-- rownum 是保留变量中显示行号的属性 -->   <td><{$data[ls].username}></td> <!-- 输出数组第二维下标为 username 的元素值 -->   <td><{$data[ls].email}></td> <!-- 输出数组第二维下标为 email 的元素值 -->   <td><{$data[ls].addTime}></td> <!-- 输出数组第二维下标为 addTime 的元素值 -->  </tr>  <{sectionelse}> <!-- 如果分配过来的数组没有内容的话,显示下面内容 -->  <tr>   <td colspan="5">对不起!暂时没有数据。</td>  </tr>  <{/section}>  <{if $data}> <!-- 如果循环的次数不为空的话,那么使用 Smarty 的保留变量 {$smarty.section} 显示出循环的次数 -->  <tr>   <td align="center" colspan="5">循环的次数为:<{$smarty.section.ls.total}></td>  </tr>  <{/if}> </table></body></html> | 
执行结果:

section 循环区域中可以使用的变量
| 
 变量名 
 | 
 描述 
 | 
| index | 用于显示当前循环的索引,从 0 开始(如果设置了 start 属性,那么就由该值开始),每次加 1,(如果指定了 step 属性,那么由该值决定) | 
| index_prev | 用于显示上一个循环索引值,循环开始时,此值为 -1 | 
| index_next | 用于显示下一个循环索引值,循环执行到最后一次时,此值仍然比当前索引值大 1(如果指定了 step 属性,那么由该值决定) | 
| iteration | 用于显示循环的次数 | 
| first | 当前 section 循环在第一次执行时该变量的值为 true | 
| last | 当前 section 循环在最后一次执行时该变量的值为 true | 
| rownum | 用于显示循环的次数,该属性是 iteration 的别名,两者相同 | 
| loop | 用于显示该循环上一次循环时的索引值,该值可以用于循环内部或循环结束后 | 
| show | 是 section 的参数,show 取值为布尔值 true 和 false,如果设置为false,该循环将不显示。如果指定了 sectionelse 子句,该子句是否显示也取决于该值 | 
| total | 用于显示循环执行的次数。不仅可以在循环中,也可以在执行结束后调用此属性 | 
PHP模板引擎Smarty内建函数section,sectionelse用法详解的更多相关文章
- PHP的模板引擎smarty原理是什么(整理)
		
PHP的模板引擎smarty原理是什么(整理) 一.总结 一句话总结:其实所有的模板引擎的工作原理是差不多的,无非就是在php程序里面用正则匹配将模板里面的标签替换为php代码从而将两者混合为一个ph ...
 - linux管道命令grep命令参数及用法详解---附使用案例|grep
		
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
 - Ubuntu kill命令用法详解
		
转自:Ubuntu kill命令用法详解 1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID root@fcola:/# ps -ef | grep sen ...
 - linux sed命令参数及用法详解
		
linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...
 - C++中的STL中map用法详解(转)
		
原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解 Map是STL的一个关联容器,它提供 ...
 - WordPress函数:get_bloginfo()用法详解
		
描述 返回你博客的信息,这些信息可以用在任何地方的 PHP 代码中.这个函数,和 bloginfo() 一样,可以用来在模板文件的任何地方显示你博客的信息. 用法 <?php $bloginfo ...
 - suricata.yaml (一款高性能的网络IDS、IPS和网络安全监控引擎)默认配置文件(图文详解)
		
不多说,直接上干货! 前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 或者 基于Ubuntu14.04下Suric ...
 - Elasticsearch SQL用法详解
		
Elasticsearch SQL用法详解 mp.weixin.qq.com 本文详细介绍了不同版本中Elasticsearch SQL的使用方法,总结了实际中常用的方法和操作,并给出了几个具体例子 ...
 - Vue props用法详解
		
Vue props用法详解 组件接受的选项之一 props 是 Vue 中非常重要的一个选项.父子组件的关系可以总结为: props down, events up 父组件通过 props 向下传递数 ...
 
随机推荐
- Flutter——Padding组件
			
在 html 中常见的布局标签都有 padding 属性,但是 Flutter 中很多 Widget 是没有 padding 属性.这个时候我们可以用 Padding 组件处理容器与子元素直接的间距. ...
 - Mysql(五):索引原理与慢查询优化
			
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
 - PAT Advanced 1153 Decode Registration Card of PAT (25 分)
			
A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...
 - VS---《在VS2010中 使用C++创建和使用DLL》(002)
			
VS---<在VS2010中 使用C++创建和使用DLL>(002) 前面初认识了创建和调用DLL,在VS工程下可以通过在 同一工程.不同工程 下创建和调用DLL.现在,同一工程下创建和调 ...
 - Python&Selenium 关键字驱动测试框架之数据文件解析
			
摘要:在关键字驱动测试框架中,除了PO模式以及一些常规Action的封装外,一个很重要的内容就是读写EXCEL,在团队中如何让不会写代码的人也可以进行自动化测试? 我们可以将自动化测试用例按一定的规格 ...
 - Java抽象类 详解
			
一.抽象类的基本概念 普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法.普通方法.static方法.常量和变量等内容.而抽象类是指在普通类的结构里面增加抽象方法的组成 ...
 - Docker清除容器镜像命令:
			
# ~/.bash_aliases # Kill all running containers. alias dockerkillall='docker kill $(docker ps -q)' # ...
 - THUWC2020 游记
			
不知道标题该叫什么,那就叫游记吧.反正是来玩的. CSP-S 排到我省三十几名,也不知怎么就过了 THU 的初审. Day0 到了宾馆.和 cy 划了一晚上. 发现自己不会做这次月考数学题,丢人啊丢人 ...
 - SVN - Subversion
			
Subversion yum install -y subversion 或者 subversion Edge 下载: # wget https://downloads-guests.open.col ...
 - node中的stream(流)内置模块
			
stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构. 什么是流?流是一种抽象的数据结构.想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地 ...