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 向下传递数 ...
随机推荐
- 安装python包时出现VC++ 错误的解决方案
方式一 就是按照提示在微软的官网上下载宇宙第一编辑器VS,安装完之后卸载掉就好了. 方式二 下载whl包安装 因为python有很多native的包,不是纯python代码,用了诸如c/c++的代码, ...
- python 之math模块
一.math 简介 import math # 导入模块 ret = dir(math) # 查看所有函数名列表 print(ret) # ['__doc__', '__loader__', '__n ...
- 注意条件表达式规范[JLS 15.25]
/** * 猜猜输出结果是什么 */ public class appalet { public static void main(String[] args) { char x = 'x'; int ...
- nginx反向代理和负载均衡的简单部署
1. 安装 1) 从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最新版本(目前是1.5.13版本)安装包: 2) ...
- ubuntu下log4cxx安装使用
需要安装log4cxx,安装的过程中可是充满了坎坷...最大的问题是在make log4cxx时,总是报undefined XML什么什么的错误,查了一下也没解决了,然后把apr-utils删了重新装 ...
- git 获得当前分支名及其对应的远程分支
git 获得当前分支名及其对应的远程分支 git symbolic-ref -q --short HEADgit rev-parse --abbrev-ref --symbolic-full-name ...
- docker学习内容
有个博客写的蛮好的,转一下 https://blog.csdn.net/xiaochendefendoushi/article/details/80979905 等我用到的时候再仔细瞧瞧
- luogu4422 [COCI2017-2018#1] Deda[线段树二分]
讨论帖:线段树二分的题..我还考场切过..白学 这题我一年前的模拟赛考场还切过,现在就不会了..好菜啊. 显然直接线段树拆成$\log n$个区间,然后每个区间在进行线段树二分即可. UPD:复杂度分 ...
- avcodec_decode_video2函数
转自 https://www.xuebuyuan.com/2156374.html 该函数的作用是实现压缩视频的解码.在avcodec.h中的声明方式如下: int avcodec_decode_vi ...
- 12 saltstack部署OpenStack
参考源码:https://github.com/unixhot/salt-openstack nova control.sls