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 中的一些经验积累
Oct 09 PHP
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
php中smarty模板条件判断用法实例
Jun 11 PHP
PHP内核探索之变量
Dec 22 PHP
Yii开启片段缓存的方法
Mar 28 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 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
xajax写的留言本
2006/11/25 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JavaScript中的值类型转换介绍
2014/12/31 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
JS将unicode码转中文方法
2017/05/08 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python实现二维插值的三维显示
2018/12/17 Python
Django 多环境配置详解
2019/05/14 Python
pandas分区间,算频率的实例
2019/07/04 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
给同事的道歉信
2014/01/11 职场文书
护理学专业求职信
2014/06/29 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python