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编程语言开发动态WAP页面
Oct 09 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
php微信公众号开发之图片回复
Oct 20 PHP
Laravel框架查询构造器简单示例
May 08 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 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
一些常用的php函数
2006/12/06 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
JS Timing
2007/04/21 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
javascript生成大小写字母
2015/07/03 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
Vue EventBus自定义组件事件传递
2018/06/25 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
JS实现打字游戏
2019/12/17 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
使用nodejs实现JSON文件自动转Excel的工具(推荐)
2020/06/24 NodeJs
python爬取51job中hr的邮箱
2016/05/14 Python
python隐藏终端执行cmd命令的方法
2019/06/24 Python
python中树与树的表示知识点总结
2019/09/14 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
马智宇结婚主持词
2014/04/01 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
谢师宴邀请函
2015/02/02 职场文书
换届选举主持词
2015/07/03 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis