PHP模板引擎Smarty内建函数section,sectionelse用法详解


Posted in PHP onApril 11, 2016

本文实例讲述了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

<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>

执行结果:

PHP模板引擎Smarty内建函数section,sectionelse用法详解

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 用于显示循环执行的次数。不仅可以在循环中,也可以在执行结束后调用此属性

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP调用Oracle存储过程
Oct 09 PHP
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
PHP查询网站的PR值
Oct 30 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
Laravel框架实现超简单的分页效果示例
Feb 08 PHP
Ajax+Jpgraph实现的动态折线图功能示例
Feb 11 PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 #PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 #PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 #PHP
PHP中如何防止外部恶意提交调用ajax接口
Apr 11 #PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 #PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 #PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 #PHP
You might like
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
PHP中如何调用webservice的实例参考
2013/04/25 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
JS继承 笔记
2011/07/13 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
python利用datetime模块计算时间差
2015/08/04 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
AJAX都有哪些有点和缺点
2012/11/03 面试题
文明礼貌演讲稿
2014/05/12 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
鸦片战争观后感
2015/06/09 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python