本文实例讲述了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 向下传递数 ...
随机推荐
-
Xcode清除缓存、清理多余证书
Xcode清除缓存.清理多余证书 1.删除Xcode中多余的证书provisioning profile 手动删除: Xcode6 provisioning profile path: ~/Libra ...
-
VirtualBox后台运行虚拟机(无图形界面启动虚拟机)
有时候可能会用虚拟机搭建集群,这是通常希望不现实图形界面,试了半天,似乎只有Virtual Box支持无图形界面运行虚拟机,方法如下: 在Virtual Box的安装目录中找到VBoxManage,M ...
-
back(返回)键总结
对于一般的android手机,都提供了四个(目前主流三个)按键.这几个按键中,back(返回)键用得比较多,对back键出发的事件一般是通过重写onKeyDown(int keyCode, KeyEv ...
-
stack note
参考 http://www.cnblogs.com/java06/archive/2012/10/16/3122428.html 1,顺序栈 定义栈: #define stacksize 1000; ...
-
Android 内核初识(7)RefBase、LightRefBase、sp和wp
简介 RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象.在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对 ...
-
.NET(C#):浅谈程序集清单资源和RESX资源
原文:.NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
-
Android Studio上修改项目(module)的包名(Package Name)
当你对着包名右击,查找Refactor(重构)下的Rename(快捷键:SHIFT+F6)时,弹出来的仅仅是包名最后一个路径的名称,如下图: 但你往往希望修改整个包名,比如exmple,所以你需要以下 ...
-
邓_ Jqery&#183;笔记本【照片】
-------------------------------------------------------------------------------------------- [PHP] - ...
-
I Know Alpha冲刺随笔集
Alpha冲刺 Day1 Alpha冲刺 Day2 Alpha冲刺 Day3 Alpha冲刺 Day4 Alpha冲刺 Day5 Alpha冲刺 Day6 Alpha冲刺 Day7 Alpha冲刺 D ...
-
基于python的OpenCV图像1
目录 1. 读入图片并显示 import cv2 img = cv2.imread("longmao.jpg") cv2.imshow("longmao", i ...