用户信息
帖子内容
1 楼
weiwei
钻石会员
积分 20
注册 2014-05-07
     
java版isort函数bug修复
用isort函数的valids参数发现了一个小bug,就是如果写了valids参数,但没写fid参数,而刚好valids不是一级分类,就不能调出数据。注:valids参数的意思是取出id在valids内的所有分类数据,比如valids=1,2,3,意思就是取出id为1,2,3的三条分类数据。
一、bug说明
例如文章模块有一级分类:A,id为1;二级分类:B,id为2。如果用{$=isort("tpl=s1;valids=1")}可以调出分类A的数据,但是{$=isort("tpl=s1;valids=2")}调用不出分类B的数据。

二、bug原因
原因就出在isort函数的如下代码
if (cls.getNum(tAry[ti][2], 0).equals(cls.getNum(tFid, 0)))
如果没写fid参数,这个的cls.getNum(tFid,0)就是0;cls.getNum(tAry[ti][2],0)获取的是分类数据中的父id,大家都知道只有一级分类的父id是0,二级分类的id不可能为0,所以因为这个if表达式,只会取出一级分类的数据并替换模板,但是我们想要的是如果没写fid参数但是写了valids参数,那就不用判断fid是否满足条件,直接取id在valids列表里的数据。

三、解决办法
解决办法很简单,两句代码:
1、在isort的String[][] tAry = tCategory.getCatAry(tGenre, cls.getNum(tLng, 0));下面加上这句代码:
   
    if(cls.isEmpty(tFid)&&(!cls.isEmpty(tValids)))tFid = "-1";//如果valids参数不为空但fid参数为空,那就让tfid="-1";代表所有分类。

2、在if (cls.getNum(tAry[ti][2], 0).equals(cls.getNum(tFid, 0)))里添加一个条件,改为:
    if ((cls.getNum(tAry[ti][2], 0).equals(cls.getNum(tFid, 0)))||(tFid.equals("-1")))

4、总结
    这是java版的,其他三个版本应该都有这个问题,问题的根本原因还是出在fid这个参数为空的时候,到底是默认取出一级分类数据还是取出所有数据。很明显,当有valids这个参数,但fid为空,肯定不能默认fid=0。




本帖由 weiwei 于 2016-01-24 11:22:08 编辑过
2016-01-24 11:09:03 深圳市大脚网络科技,www.bigfoot.xin,H5开发、公众号开发、响应式网站建设