The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ Volist标签 ]

Volist标签主要用于在模板中循环输出数据集或者多维数组。

1:赋值

 
通常我们从数据库获取的返回的结果是一个二维数组,可以直接使用volist标签进行输出。
 
在Controller中首先对模版赋值:

  1. $arrList = array(   
  2.     array(   
  3.         'title'=>'微软早已沉睡多年',   
  4.          'people'=>'Mozilla欧洲总裁Tristan Nitot',   
  5.         'saying'=>'在解释Firefox成功原因时,Tristan Nitot说:“在近6年的时间里,Web技术不断发展的同时,   
  6.   
  7. 浏览器却并未有任何改善,因为微软已经睡着了。”',   
  8.     ),   
  9.     array(   
  10.          'title'=>'同时惹怒微软和英特尔那就对了',   
  11.          'people'=>'美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝',   
  12.         'saying'=>'谈到百元笔记本电脑时,尼葛洛庞帝说:“AMD是我们的合作伙伴,这就意味着我们得罪了英特   
  13.   
  14. 尔,比尔·盖茨也会不高兴。但是,如果我们同时惹怒了微软和英特尔,那么我们就做了一件正确事情。”',   
  15.     ),   
  16.     array(   
  17.          'title'=>'微软并不考虑消费者的需求',   
  18.         'people'=>'英国喜剧演员史蒂芬·弗莱',   
  19.         'saying'=>'英国著名喜剧演员史蒂芬·弗莱(Stephen Fry)年初在谈到Windows Mobile 6时曾表示:“微软   
  20.   
  21. 所有产品给人的感觉是,所有的特征和功能都是设计出来的,因此都迎合微软的心理,而不是消费者的需求。”',   
  22.     ),   
  23.     array(   
  24.          'title'=>'微软你要是有证据就告我好了',   
  25.         'people'=>'Linux之父李纳斯·托沃兹',   
  26.         'saying'=>'在微软抛出“Linux侵权说”之后,Linux之父李纳斯·托沃兹(Linus Torvalds)说:“微软只说   
  27.   
  28. Linux侵权,但却不公布具体的侵权之处。如果微软真的拥有这些专利,那么就应该直接告诉我们。”',   
  29.     ),   
  30.     array(   
  31.          'title'=>'我们微软在搜索领域里是个上进者',   
  32.          'people'=>'微软CEO史蒂夫·鲍尔默',   
  33.          'saying'=>'一向攻击竞争对手Google的鲍尔默却承认,微软在搜索领域落后于Google和雅虎。鲍尔默说:   
  34.   
  35. “在搜索和广告市场,Google是领头羊,我们是第三。但是,我们是一个上进者。”',   
  36.     ),   
  37. );   
  38. $this->assign('arrList',$arrList);   
  39. $this->display();  

如图:


2:普通输出

然后我们在模版中定义如下代码,循环输出名言标题和IT名人:

  1. <volist name="arrList" id="arrVo">     
  2. <font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font>   
  3. <br><br>      
  4. </volist>  


程序运行后编译后的PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 05:46:40  */ ?>   
  2. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  3.   
  4. ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>     
  5. <font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title ); ?></font>-<font    
  6.   
  7. color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?></font>   
  8. <br><br>      
  9. <?php endforeach; endif; else: echo "" ;endif; ?>  

如图:


程序运行后的输出结果如下:

微软早已沉睡多年-Mozilla欧洲总裁Tristan Nitot

同时惹怒微软和英特尔那就对了-美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝

微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱

微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹

我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔

如图:

Volist标签的name属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。id表示当前的循环变量,可以随意指定,

但确保不要和name属性冲突,例如:

  1. <volist name="arrList" id="arrData">     
  2. <font color="red">{$arrData['title']}</font>-<font color="blue">{$arrData['people']}</font>   
  3. <br><br>      
  4. </volist>  


程序运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 05:55:14  */ ?>   
  2. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  3.   
  4. ($arrList as $key=>$arrData): ++$i;$mod = ($i % 2 )?>     
  5. <font color="red"><?php echo( $arrData['title'] ); ?></font>-<font color="blue"><?php echo( $arrData['people']    
  6.   
  7. ); ?></font>   
  8. <br><br>      
  9. <?php endforeach; endif; else: echo "" ;endif; ?>   


如图:


程序运行结果和上面的一模一样,这里就不用再次重复写了。


3:部分输出

支持输出部分数据,例如输出其中的第2~4条记录

  1. <volist name="arrList" id="arrVo" offset="2" length='4'>     
  2. <font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font>   
  3. <br><br>      
  4. </volist>   


程序运行后的PHP 编译代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 05:58:11  */ ?>   
  2. <?php if(is_array($arrList)): $i = 0; $arrList = array_slice($arrList,2,4);if( count($arrList)==0 ) : echo ""    
  3.   
  4. ;else: foreach($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>     
  5. <font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title ); ?></font>-<font    
  6.   
  7. color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?></font>   
  8. <br><br>      
  9. <?php endforeach; endif; else: echo "" ;endif; ?>  

如图:


程序运行后的结果如下:

  1. 微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱   
  2.   
  3. 微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹   
  4.   
  5. 我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔默  

如图:


4:输出偶数记录

volist还支持按偶数输出,例如,我们在模板中写下如下的代码:

  1. {#偶数输出}   
  2. <h1>偶数输出</h1>   
  3. <volist name="arrList" id="arrVo" mod="2">     
  4. <eq name="mod" value="1"><font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font></eq>   
  5. <br><br>      
  6. </volist>  


程序运行后的PHP 编译代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:11:57  */ ?>   
  2. <!--偶数输出-->   
  3. <h1>偶数输出</h1>   
  4. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  5.   
  6. ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>     
  7. <?php if(($mod)  ==  "1"): ?><font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title    
  8.   
  9. ); ?></font>-<font color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?   
  10.   
  11. ></font><?php endif; ?>   
  12. <br><br>      
  13. <?php endforeach; endif; else: echo "" ;endif; ?>  


如图:


程序运行的执行结果如下:

  1. 偶数输出   
  2. 微软早已沉睡多年-Mozilla欧洲总裁Tristan Nitot   
  3.   
  4.   
  5.   
  6. 微软并不考虑消费者的需求-英国喜剧演员史蒂芬·弗莱   
  7.   
  8.   
  9.   
  10. 我们微软在搜索领域里是个上进者-微软CEO史蒂夫·鲍尔默  


如图:


5:输出奇数记录:

volist还支持奇数记录的输出:

  1. {#奇数输出}   
  2. <h1>奇数输出</h1>   
  3. <volist name="arrList" id="arrVo" mod="2">     
  4. <eq name="mod" value="0"><font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font></eq>   
  5. <br><br>      
  6. </volist>  


程序编译后的PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:20:07  */ ?>   
  2. <!--奇数输出-->   
  3. <h1>奇数输出</h1>   
  4. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  5.   
  6. ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>     
  7. <?php if(($mod)  ==  "0"): ?><font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title    
  8.   
  9. ); ?></font>-<font color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?   
  10.   
  11. ></font><?php endif; ?>   
  12. <br><br>      
  13. <?php endforeach; endif; else: echo "" ;endif; ?>  


如图:

 

程序运行结果如下:

  1. 奇数输出   
  2.   
  3.   
  4. 同时惹怒微软和英特尔那就对了-美国麻省理工学院媒体实验室创始人尼古拉斯·尼葛洛庞帝   
  5.   
  6.   
  7.   
  8. 微软你要是有证据就告我好了-Linux之父李纳斯·托沃兹  

如图:


说明如下:奇数记录和偶数记录规定如下,我们以数组的0为开始,0、2、4为偶记录,其它的都为基数记录。


6:控制换行

Mod属性还用于控制一定记录的换行,例如:
  1. <volist name="arrList" id="arrVo" mod="2">     
  2. <font color="red">{$arrVo.title}</font>-<font color="blue">{$arrVo.people}</font>   
  3. <eq name="mod" value="0"><换行><br><br></eq>     
  4. </volist>  


程序运行后的编译PHP 代码为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:33:23  */ ?>   
  2. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  3.   
  4. ($arrList as $key=>$arrVo): ++$i;$mod = ($i % 2 )?>     
  5. <font color="red"><?php echo( is_array($arrVo) ? $arrVo['title'] : $arrVo->title ); ?></font>-<font    
  6.   
  7. color="blue"><?php echo( is_array($arrVo) ? $arrVo['people'] : $arrVo->people ); ?></font>   
  8. <?php if(($mod)  ==  "0"): ?><换行><br><br><?php endif; ?>     
  9. <?php endforeach; endif; else: echo "" ;endif; ?>  


如图:

程序最后运行结果如下:

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

如图:


7:输出循环变量

我们在模版中写下如下的代码:

  1. <volist name="arrList" id="vo" i="k" >     
  2. {$k}.{$vo.people}<br>      
  3. </volist>   

程序运行后编译的PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:53:55  */ ?>   
  2. <?php if(is_array($arrList)): $k = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  3.   
  4. ($arrList as $key=>$vo): ++$k;$mod = ($k % 2 )?>     
  5. <?php echo( $k ); ?>.<?php echo( is_array($vo) ? $vo['people'] : $vo->people ); ?><br>      
  6. <?php endforeach; endif; else: echo "" ;endif; ?>   

如图:


程序运行结果如下:

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


如图:


如果没有指定 i 属性的话,默认使用循环变量 i ,例如,我们在模板中写入如下的代码:

  1. <volist name="arrList" id="vo"  >     
  2. {$i}.{$vo.title}<br>     
  3. </volist>   


程序运行后编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-11 06:44:00  */ ?>   
  2. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  3.   
  4. ($arrList as $key=>$vo): ++$i;$mod = ($i % 2 )?>     
  5. <?php echo( $i ); ?>.<?php echo( is_array($vo) ? $vo['title'] : $vo->title ); ?><br>      
  6. <?php endforeach; endif; else: echo "" ;endif; ?>  

如图:


程序运行结果如下:

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


如图:


8:输出数组的索引

如果要输出数组的索引,可以直接使用key变量,和循环变量不同的是,这个key是由数据本身决定,而不是循环控制的,这个

key可以通过key属性指定。

例如:

  1. <volist name="arrList" id="vo"  >     
  2. 我是一维的键值<font color="green">$key</font>:{$key}<br>    
  3. </volist>   
  4.   
  5. ---- 分割 ----<br>   
  6.   
  7. <volist name="arrList" id="vo"  key='key2'>     
  8. 我是一维的键值<font color="green">$key2</font>:{$key2}<br>    
  9. </volist><volist name="arrList" id="vo"  >     
  10. 我是一维的键值<font color="green">$key</font>:{$key}<br>    
  11. </volist>   
  12.   
  13. ---- 分割 ----<br>   
  14.   
  15. <volist name="arrList" id="vo"  key='key2'>     
  16. 我是一维的键值<font color="green">$key2</font>:{$key2}<br>    
  17. </volist>  


编译后的PHP 如下:

  1. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  2.   
  3. ($arrList as $key=>$vo): ++$i;$mod = ($i % 2 )?>     
  4. 我是一维的键值<font color="green">$key</font>:<?php echo( $key ); ?><br>    
  5. <?php endforeach; endif; else: echo "" ;endif; ?>   
  6.   
  7. ---- 分割 ----<br>   
  8.   
  9. <?php if(is_array($arrList)): $i = 0; $arrList = $arrList;if( count($arrList)==0 ) : echo "" ;else: foreach  
  10.   
  11. ($arrList as $key2=>$vo): ++$i;$mod = ($i % 2 )?>     
  12. 我是一维的键值<font color="green">$key2</font>:<?php echo( $key2 ); ?><br>    
  13. <?php endforeach; endif; else: echo "" ;endif; ?>  


如图:


  1. 我是一维的键值$key:0   
  2. 我是一维的键值$key:1   
  3. 我是一维的键值$key:2   
  4. 我是一维的键值$key:3   
  5. 我是一维的键值$key:4   
  6. ---- 分割 ----   
  7. 我是一维的键值$key2:0   
  8. 我是一维的键值$key2:1   
  9. 我是一维的键值$key2:2   
  10. 我是一维的键值$key2:3   
  11. 我是一维的键值$key2:4  

如图:


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