欢迎各位兄弟 发布技术文章

这里的技术是共享的

关于volist mod的使用

因为使用表格 循环准备循环输出用户信息(其实DIV也可以),发现Volist有个mod属性可以控制循环输出的行数
  1. <volist name="list" id="vo" mod="5" >
  2. {$vo.name}
  3.  <eq name="mod" value="4"><br/></eq>
  4.  </volist>
复制代码
 
复制代码
 
手册是这样说的:
mod:对key值取模,默认为2
我想问,这里用什么东西对$key去模?
mod:是用来对$key去模的值还是去摸后的结果?
我最后是这样做的
  1. <volist name="alist" id="vos" mod="6">
  2.                       <eq name="mod" value="5"></tr><tr height="10"></tr><tr></eq>
  3.                     <td class="user">
  4.                     <a href="!-GROUP-!/Carmain/userinfo?u_id={$vos['u_id']}">
  5.                         <div style=" text-align:center;width:100%; height:100px;">
  6.                             <img src="/{$vos['u_img']}" width="100%" height="100%">
  7.                         </div>
  8.                         <div class="wenzi" >
  9.                             {$vos['fullname']}
  10.                               
  11.                             {$vos['u_sex']}
  12.                         </div>
  13.                         <div class="wenzi">
  14.                         电话:{$vos['username']}
  15.                         </div>
  16.                     </a>
  17.                     </td><td width="5"></td>
  18.                     </volist>
复制代码
 
复制代码
 
但是结果是图片下面的内容




百度说:
  1. 原代码:
  2.         $parseStr .= '++$'.$key.';';
  3.         $parseStr .= '$mod = ($'.$key.' % '.$mod.' )?>';
  4.  修改后:
  5.         $parseStr .= '$mod = ($'.$key.' % '.$mod.' );';
  6.         $parseStr .= '++$'.$key.'?>';
复制代码
 
复制代码
 
更改后还是那样
能不能给个关于 volist mod的详解呢?谢谢哦!
http://www.thinkphp.cn/Public/new/img/best.png) 12px 4px no-repeat rgb(251, 251, 251);">最佳答案
 
haran 2013年07月26日
看看这个,就是你想要的。
http://www.thinkphp.cn/topic/3009.html
评论(4相关
cc28862013年07月26日
volist 直接弃用。多余
haran2013年07月26日
看看这个,就是你想要的。
http://www.thinkphp.cn/topic/3009.html
回复litton2013年07月26日
3q
liangkaihua2013年07月26日
还没用过mod参数,后续在深入研究
haran2013年07月26日
mod是取模,意思是一个数除以另外一个数取余数。
  1. <volist name="list" id="vo" mod="5" >
  2. {$vo.name}
  3.  <eq name="mod" value="4"><br/></eq>
  4.  </volist>
复制代码
 
复制代码
 
这里的意思就是行数除以5,当余数为4的时候输出<br>,比如第4、9、14、19行
回复litton2013年07月26日
<eq name="mod" value="4"><br/></eq> 意思 当Mod为4的时候输出<br>
请问下:这里的Mod是对$key去摸的数、还是被去摸的数、还是去摸得到的余数?
回复litton2013年07月26日
另外 <eq name="mod" value="4"><br/></eq> 这里的mod
和 <volist name="list" id="vo" mod="5" > 是不是同一个mod?
回复haran2013年07月26日
回复 litton : mod是一个
回复haran2013年07月26日
回复 litton : <eq name="mod" value="4"><br/></eq>
意思就是count($list)除以mod余数为4
回复litton2013年07月26日
回复 haran : 非常感谢!是我理解有误还是TP这里不严谨我一直以为<eq name="mod" value="4"><br/></eq>的意思是
if($mod==4){
echo "<br/>"
}
难道不是吗?
回复haran2013年07月26日
回复 litton : 的确,这里的mod会产生一定的混淆。但实践的结果会告诉我们真相。
来自  http://www.thinkphp.cn/topic/3862.html


急:使用<volist>输出5列时遇到了困难[问题已解决]

 
浏览:3695 发布日期:2013/07/03 分类:求助交流
我想用表格输出5列,效果如下图:



用模mod值来输出表格行<tr>,现在的问题是,输出最后一个时,若mod值不是4时,最后一行缺少标签</tr>,我想到的办法是判断key值是不是最后一个,但<volist>没有提供总个数参数,大家还有什么好的办法吗?
<table>
<volist name="list" id="vo" key="i" mod="5">
<eq name="mod" value="0"><tr></eq>
<td>{$vo.name}</td>
<eq name="mod" value="4"></tr></eq>
</volist>
</table>
注:可能有人提醒,浏览器里缺少</tr>也能正常显示,所以不用考虑上面的问题,这个说法虽然有道理,但对于严谨的程序员,这不是可以接受的答案.

--------------------------

在大家的帮助下,这个问题我搞定了.综合大家的意见后,编写了下面的代码,既能解决问题,代码又简练:
<table>
<volist name="list" id="vo" key="i" mod="5">
<eq name="mod" value="0"><tr></eq>
<td>{$vo.name}</td>
<if condition="$i eq count($list)"></tr>
<else />
<eq name="mod" value="4"></tr></eq>
</if>
</volist>
</table>
评论(12相关
gongqingtuan2013年07月06日
volist 在BAE环境下,测试了貌似不成功。要用常规的PHP的输出办法吗?
回复plumdavid2013年07月11日
什么意思啊,我上面的代码测试没有问题.
THINKTB2013年07月03日
<eq><else/></eq>
回复plumdavid2013年07月03日
哦,<eq>支持<else />啊,谢谢指点。
haran2013年07月03日
很好。直接count($list)我没想到。key="i"应可省略,因为默认就是i。
回复plumdavid2013年07月03日
对,key默认就是i,可我还是习惯写出来,使程序更清晰。
zhangsan2013年07月03日
  1.  
  2.  <table border='1'>
  3.     <volist name='arr' id='v' mod='5'>
  4.         <eq name='mod' value='0'><tr></eq>
  5.         <td style='border: solid 1px red;'>{$v}</td>
  6.         <if condition='count($arr) eq ($key+1)'> 
  7.             <php>
  8.                 for($i=1;$i<(5-$mod);$i++){ 
  9.                     echo "<td style='border: solid 1px blue;'> </td>"; } 
  10.             </php> 
  11.         </if> 
  12.         <eq name='mod' value='4'></tr></eq> 
  13.     </volist>
  14.  </table>
  15.  
复制代码
复制代码
复制代码
 

可以看出蓝色框是输出的空白单元格
回复plumdavid2013年07月03日
非常感谢.
麦当苗儿2013年07月03日
这个问题应该用for 循环输出, 两层for循环就OK啦 。。。
回复plumdavid2013年07月03日
谢谢提醒
haran2013年07月03日
Action中:
  1.  
  2.     Public function test () {
  3.         $db = M("Member");
  4.         $this->result = $db->select();
  5.         $this->count = $db->count();
  6.         $this->display();
  7.     }
  8.  
复制代码
复制代码
复制代码
 

html中:
  1.  
  2.     <table class="table">
  3.         <volist name="result" id="vo" mod="5">
  4.         <eq name="mod" value="0"><tr></eq>
  5.             <td><{$i}>-<{$vo.id}></td>
  6.         <eq name="mod" value="4"></tr></eq>
  7.         <if condition="$i eq $count"></tr></if>
  8.         </volist>
  9.     </table>
  10.  
复制代码
复制代码
复制代码
 

实际上就是取个总数$count,将volist中的默认循环变量$i和$count比较,相等的情况下输出</tr>
回复plumdavid2013年07月03日
<if condition="$i eq $count"></tr></if>得加上mod值不为4的判定,改成<if condition="$i eq $count and $mod neq 4"></tr></if>,正确吗?
回复plumdavid2013年07月03日
TP手册里,为什么在<volist>里不表述变量$count呢?
回复haran2013年07月03日
回复 plumdavid : 实际上就是取个总数$count,这个$count是从Action中取出的,将volist中的默认循环变量$i和$count比较,相等的情况下输出</tr>,不需要再加mod条件了。
回复haran2013年07月03日
回复 plumdavid : 我的理解volist里的默认循环变量$i实际就是数据总数,再从Action里取一个总数,这样比较一下就行了。
回复plumdavid2013年07月03日
我回贴里,在if里追加$mod neq 4的条件,是因为:若$count余数是4,可能出现两个</tr>
回复haran2013年07月03日
回复 plumdavid : 要显示的数据等于4的时候会出现最后没有</tr>输出。真要追求完美的话,加这个判断就行了。
回复plumdavid2013年07月03日
回复 haran : 我把你那个略改一下,应该能成.我试一下.
祥云网络2013年07月03日
回复 plumdavid : 如果$list是mod整倍数,用你的方法应该可以的。
yunwuxin2013年07月03日
count($list)不就是总个数么
回复plumdavid2013年07月03日
{$list|count},我试试.
祥云网络2013年07月03日
我的回复怎么被莫名的删除了?
回复plumdavid2013年07月03日
在我的消息里有:
祥云网络13分钟前 在急:使用输出5列时遇到了困难,在线等.回复我:
如何使用mod,$list中的元素个数必须是你mod值的倍数才会输出最后的</tr>,建议贴出想要的效果吧,也别用<table>了,html5中都淘汰了。
回复祥云网络2013年07月03日
回复 plumdavid : Bug?
plumdavid2013年07月03日
谢谢1楼关注,假设$list有6个元素,输出是这样的:
<table>
<tr>
<td>name0</td>
<td>name1</td>
<td>name2</td>
<td>name3</td>
<td>name4</td>
</tr>
<tr>
<td>name5</td>
</table>
发现没,表格中最后少了一个</tr>
haran2013年07月03日
补充一下场景信息。可在excel里建出你要的表格样式,截图贴出来。
我的理解:一般情况下,表络每一列是一组信息,你想变成一行一组信息?
回复plumdavid2013年07月03日
补充效果图了.
回复plumdavid2013年07月03日
表格每一个td就是一组信息.
我实际需求是这样的:
我有近100个网络节点,我想在一个页面里把他们的通断情况都显示出来,这样,网络工程师就能很方便看清所有网络状况.
我若是每一行放一个节点,那我就要用100行,我若是一行放5个节点,20行就能搞定.
为此,我设计了表格,每行5个表格项<td>,在每个表格项<td>里存放一个网络节点的名称、丢包率和延迟,这样,100个网络节点只用一个20行页面就能看到所有网络节点情况了.
zhangsan2013年07月03日
没看懂你逻辑,照你现在贴出的代码是每隔5行输出一个<tr>,但<td>是任何情况都输出,最后取余4的输出</tr>,没看懂。。。
来自  http://www.thinkphp.cn/topic/3009.html
唯物品评历史

关注"唯物品评历史",跟着泪痕春雨先生,读懂历史,看彻人生

打开隐藏二维码