Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
Volist标签主要用于在模板中循环输出数据集或者多维数组。
通常我们从数据库获取的返回的结果是一个二维数组,可以直接使用volist标签进行输出。
在Controller中首先对模版赋值:
- $arrList = array(
- array(
- 'title'=>'微软早已沉睡多年',
- 'people'=>'Mozilla欧洲总裁Tristan Nitot',
- 'saying'=>'在解释Firefox成功原因时,Tristan Nitot说:“在近6年的时间里,Web技术不断发展的同时,
- 浏览器却并未有任何改善,因为微软已经睡着了。”',
- ),
- array(
- 'title'=>'同时惹怒微软和英特尔那就对了',
- 'people'=>'美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝',
- 'saying'=>'谈到百元笔记本电脑时,尼葛洛庞帝说:“AMD是我们的合作伙伴,这就意味着我们得罪了英特
- 尔,比尔·盖茨也会不高兴。但是,如果我们同时惹怒了微软和英特尔,那么我们就做了一件正确事情。”',
- ),
- array(
- 'title'=>'微软并不考虑消费者的需求',
- 'people'=>'英国喜剧演员史蒂芬·弗莱',
- 'saying'=>'英国著名喜剧演员史蒂芬·弗莱(Stephen Fry)年初在谈到Windows Mobile 6时曾表示:“微软
- 所有产品给人的感觉是,所有的特征和功能都是设计出来的,因此都迎合微软的心理,而不是消费者的需求。”',
- ),
- array(
- 'title'=>'微软你要是有证据就告我好了',
- 'people'=>'Linux之父李纳斯·托沃兹',
- 'saying'=>'在微软抛出“Linux侵权说”之后,Linux之父李纳斯·托沃兹(Linus Torvalds)说:“微软只说
- Linux侵权,但却不公布具体的侵权之处。如果微软真的拥有这些专利,那么就应该直接告诉我们。”',
- ),
- array(
- 'title'=>'我们微软在搜索领域里是个上进者',
- 'people'=>'微软CEO史蒂夫·鲍尔默',
- 'saying'=>'一向攻击竞争对手Google的鲍尔默却承认,微软在搜索领域落后于Google和雅虎。鲍尔默说:
- “在搜索和广告市场,Google是领头羊,我们是第三。但是,我们是一个上进者。”',
- ),
- );
- $this->assign('arrList',$arrList);
- $this->display();
如图:

然后我们在模版中定义如下代码,循环输出名言标题和IT名人:
- <volist name="arrList" id="arrVo">
- <font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font>
- <br><br>
- </volist>
程序运行后编译后的PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 05:46:40 */ ?>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>
- <font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title ); ?></font>-<font
- color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?></font>
- <br><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行后的输出结果如下:
微软早已沉睡多年-Mozilla欧洲总裁Tristan Nitot
同时惹怒微软和英特尔那就对了-美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝
微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱
微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹
我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔
如图:

Volist标签的name属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。id表示当前的循环变量,可以随意指定,
但确保不要和name属性冲突,例如:
- <volist name="arrList" id="arrData">
- <font color="red">{$arrData['title']}</font>-<font color="blue">{$arrData['people']}</font>
- <br><br>
- </volist>
程序运行后的编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 05:55:14 */ ?>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$arrData): ++$i;$mod = ($i % 2 )?>
- <font color="red"><?php echo( $arrData['title'] ); ?></font>-<font color="blue"><?php echo( $arrData['people']
- ); ?></font>
- <br><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行结果和上面的一模一样,这里就不用再次重复写了。
支持输出部分数据,例如输出其中的第2~4条记录
- <volist name="arrList" id="arrVo" offset="2" length='4'>
- <font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font>
- <br><br>
- </volist>
程序运行后的PHP 编译代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 05:58:11 */ ?>
- <?php if(is_array($arrList)): $i = 0; $arrList = array_slice($arrList,2,4);if( count($arrList)==0 ) : echo ""
- ;else: foreach($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>
- <font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title ); ?></font>-<font
- color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?></font>
- <br><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行后的结果如下:
- 微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱
- 微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹
- 我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔默
如图:
volist还支持按偶数输出,例如,我们在模板中写下如下的代码:
- {#偶数输出}
- <h1>偶数输出</h1>
- <volist name="arrList" id="arrVo" mod="2">
- <eq name="mod" value="1"><font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font></eq>
- <br><br>
- </volist>
程序运行后的PHP 编译代码:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:11:57 */ ?>
- <!--偶数输出-->
- <h1>偶数输出</h1>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>
- <?php if(($mod) == "1"): ?><font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title
- ); ?></font>-<font color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?
- ></font><?php endif; ?>
- <br><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行的执行结果如下:
- 偶数输出
- 微软早已沉睡多年-Mozilla欧洲总裁Tristan Nitot
- 微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱
- 我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔默
如图:

volist还支持奇数记录的输出:
- {#奇数输出}
- <h1>奇数输出</h1>
- <volist name="arrList" id="arrVo" mod="2">
- <eq name="mod" value="0"><font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font></eq>
- <br><br>
- </volist>
程序编译后的PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:20:07 */ ?>
- <!--奇数输出-->
- <h1>奇数输出</h1>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>
- <?php if(($mod) == "0"): ?><font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title
- ); ?></font>-<font color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?
- ></font><?php endif; ?>
- <br><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行结果如下:
- 奇数输出
- 同时惹怒微软和英特尔那就对了-美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝
- 微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹
如图:

说明如下:奇数记录和偶数记录规定如下,我们以数组的0为开始,0、2、4为偶记录,其它的都为基数记录。
Mod属性还用于控制一定记录的换行,例如:
- <volist name="arrList" id="arrVo" mod="2">
- <font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font>
- <eq name="mod" value="0"><换行><br><br></eq>
- </volist>
程序运行后的编译PHP 代码为:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:33:23 */ ?>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>
- <font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title ); ?></font>-<font
- color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?></font>
- <?php if(($mod) == "0"): ?><换行><br><br><?php endif; ?>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序最后运行结果如下:
- 微软早已沉睡多年-Mozilla欧洲总裁Tristan Nitot 同时惹怒微软和英特尔那就对了-美国麻省理工学院媒体实验室创始人尼古
- 拉斯·尼葛洛庞帝 <换行>
- 微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱 微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹 <换行>
- 我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔默
如图:

我们在模版中写下如下的代码:
- <volist name="arrList" id="vo" i="k" >
- {$k}.{$vo.people}<br>
- </volist>
程序运行后编译的PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:53:55 */ ?>
- <?php if(is_array($arrList)): $k = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$vo): ++$k;$mod = ($k % 2 )?>
- <?php echo( $k ); ?>.<?php echo( is_array($vo) ? $vo['people'] : $vo->people ); ?><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行结果如下:
- 1.Mozilla欧洲总裁Tristan Nitot
- 2.美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝
- 3.英国喜剧演员史蒂芬·弗莱
- 4.Linux之父李纳斯·托沃兹
- 5.微软CEO史蒂夫·鲍尔默
如图:

如果没有指定 i 属性的话,默认使用循环变量 i ,例如,我们在模板中写入如下的代码:
- <volist name="arrList" id="vo" >
- {$i}.{$vo.title}<br>
- </volist>
程序运行后编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:44:00 */ ?>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$vo): ++$i;$mod = ($i % 2 )?>
- <?php echo( $i ); ?>.<?php echo( is_array($vo) ? $vo['title'] : $vo->title ); ?><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

程序运行结果如下:
- 1.微软早已沉睡多年
- 2.同时惹怒微软和英特尔那就对了
- 3.微软并不考虑消费者的需求
- 4.微软你要是有证据就告我好了
- 5.我们微软在搜索领域里是个上进者
如图:

如果要输出数组的索引,可以直接使用key变量,和循环变量不同的是,这个key是由数据本身决定,而不是循环控制的,这个
key可以通过key属性指定。
例如:
- <volist name="arrList" id="vo" >
- 我是一维的键值<font color="green">$key</font>:{$key}<br>
- </volist>
- ---- 分割 ----<br>
- <volist name="arrList" id="vo" key='key2'>
- 我是一维的键值<font color="green">$key2</font>:{$key2}<br>
- </volist><volist name="arrList" id="vo" >
- 我是一维的键值<font color="green">$key</font>:{$key}<br>
- </volist>
- ---- 分割 ----<br>
- <volist name="arrList" id="vo" key='key2'>
- 我是一维的键值<font color="green">$key2</font>:{$key2}<br>
- </volist>
编译后的PHP 如下:
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key=>$vo): ++$i;$mod = ($i % 2 )?>
- 我是一维的键值<font color="green">$key</font>:<?php echo( $key ); ?><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
- ---- 分割 ----<br>
- <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach
- ($arrList as $key2=>$vo): ++$i;$mod = ($i % 2 )?>
- 我是一维的键值<font color="green">$key2</font>:<?php echo( $key2 ); ?><br>
- <?php endforeach; endif; else: echo "" ;endif; ?>
如图:

- 我是一维的键值$key:0
- 我是一维的键值$key:1
- 我是一维的键值$key:2
- 我是一维的键值$key:3
- 我是一维的键值$key:4
- ---- 分割 ----
- 我是一维的键值$key2:0
- 我是一维的键值$key2:1
- 我是一维的键值$key2:2
- 我是一维的键值$key2:3
- 我是一维的键值$key2:4
如图:

注意:大家看到没有,索引从0开始,而不是从1开始,这个是数组原始索引。
