Thinkphp的volist标签嵌套循环使用教程


Posted in PHP onJuly 08, 2014

本文较为详细的对ThinkPHP的volist标签嵌套的用法阐述如下:

首先,在Thinkphp开发手册中,有关于<volist>标签嵌套的解释说明。如下:

标签嵌套:

模板引擎支持标签的多层嵌套功能,可以对标签库的标签指定可以嵌套。
系统内置的标签中,volist(及其别名iterate)、switch、if、elseif、else、foreach、compare(包括所有的比较标签)、(not)present、(not)empty、(not)defined等标签都可以嵌套使用。例如:

<volist name="list" id="vo">
<volist name="vo['sub']" id="sub">
{$sub.name}
</volist>
</volist>

上面的标签可以用于输出双重循环。

默认的嵌套层次是3级,所以嵌套层次不能超过3层,如果需要更多的层次可以指定TAG_NESTED_LEVEL配置参数。
但是在Action中具体应该怎样赋值“list”呢?从说明中可以看出,list应该是一个二维数组,下边是一段测试代码,经测试可以使用。

$Baojia=new Model('baojia');
$Class=new Model('class');
$parent=$Class->select();   
foreach($parent as $n=> $val){
$parent[$n]['voo']=$Baojia->where('belongto=\''.$val['name'].'\'')->select();
}
$this->assign('list',$parent);
<volist name="list" id="vo">
    {$vo.name}<BR>
<volist name="vo['voo']" id="sub">
 {$sub.name}
</volist><BR>
</volist>

数据库中定义了两个表,一个是报价表,一个是分类表,实现的功能是像树形菜单一样,显示分类,每个分类下边是各个型号的报价。

代码主要功能是:

1.首先创建模型:

$Baojia=new Model('baojia');
$Class=new Model('class');

2.然后查询分类中的数据,这一步非常重要,因为我们知道,数据库查询返回的是类似表格的二维形式的数据,当我们取出单条数据时,相当与读取每行数据。当调用<volist>时,thinkphp后台会自动读取每一行数据。

$parent=$Class->select();

将报价中的数据存入$parent中,其中$n是$parent数组的序号,也就相当于存入$parent中的数据表,每行添加一个索引,这个索引指向属于这个分类的报价。

foreach($parent as $n=> $val){
$parent[$n]['voo']=$Baojia->where('belongto=\''.$val['name'].'\'')->select();   
}

3.最后:

$this->assign('list',$parent);

显示输出!

通过这个程序,可以更深入的理解<volist>标签,其实如果在数据库操作中,<volist>标签的name只能assign 成数据库表类型(当然也可以是数组型,因为数据库查询得到的数据本身就是数组型的),当我们在视图页面调用<volist>标签时,特别是嵌套调用时,始终记住每一层的name都必须是数组型的,像本程序中,最外层,<volist name="list" id="vo">这里的list就是我们最初定义的$parent,这个变量指向查询class表得到的数据表,里层<volist name="vo['voo']" id="sub">,也就是$parent[$n]['voo']所指向的数据表,也就是报价表中的相应数据。

通过这样的分析,条理已经很清晰了,举一反三就可以实现N重循环,当然如果需要更多的层次可以指定TAG_NESTED_LEVEL配置参数。

这样的话,就可以实现例如:国家->省->市->县->乡镇等多重循环

PHP 相关文章推荐
php 魔术函数使用说明
Feb 21 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
php简单图像创建入门实例
Jun 10 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 #PHP
PHP的error_reporting错误级别变量对照表
Jul 08 #PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 #PHP
php+mysql不用递归实现的无限级分类实例(非递归)
Jul 08 #PHP
PHP生成短网址的3种方法代码实例
Jul 08 #PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 #PHP
php中函数前加&amp;符号的作用分解
Jul 08 #PHP
You might like
漂亮但不安全的CTB
2006/10/09 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
php动态函数调用方法
2015/05/21 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
JavaScript中的splice()方法使用详解
2015/06/09 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
vue2 router 动态传参,多个参数的实例
2017/11/10 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
Python获取网页上图片下载地址的方法
2015/03/11 Python
Python中的集合类型知识讲解
2015/08/19 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python 链接和操作 memcache方法
2017/03/04 Python
Python机器学习之决策树算法
2017/12/22 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
基于python中__add__函数的用法
2019/11/25 Python
如何基于python操作json文件获取内容
2019/12/24 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
积极分子思想汇报
2014/01/04 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
Python快速优雅的批量修改Word文档样式
2021/05/20 Python