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中常用数组处理方法实例分析
Aug 30 PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
php内嵌函数用法实例
Mar 20 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
orm获取关联表里的属性值
Apr 17 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
Oct 18 PHP
PHP程序守护进程化实现方法详解
Jul 16 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
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
python复制文件的方法实例详解
2015/05/22 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
如何通过python画loss曲线的方法
2019/06/26 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
linux比较文件内容的命令是什么
2013/03/04 面试题
材料加工工程求职信
2014/02/19 职场文书
培训班主持词
2014/03/28 职场文书
公共场所标语
2014/06/30 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
初一数学教学反思
2016/02/17 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python