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 代码优化的42条建议 推荐
Sep 25 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
php实例分享之mysql数据备份
May 19 PHP
javascript some()函数用法详解
Nov 13 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
基于PHP实现用户在线状态检测
Nov 10 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读取目录下所有文件的代码
2008/01/07 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
ReactNative列表ListView的用法
2017/08/02 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结
2020/05/28 Javascript
python搭建微信公众平台
2016/02/09 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python把转列表为集合的方法
2019/06/28 Python
python requests指定出口ip的例子
2019/07/25 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
电脑专业个人求职信范文
2014/02/04 职场文书
暑期培训随笔感言
2014/03/10 职场文书
社会调查研究计划书
2014/05/01 职场文书
2015年大学生实习评语
2015/03/25 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
Python 中的单分派泛函数你真的了解吗
2021/06/22 Python