有点崩溃的get_extension_goods

2016-07-07 16:18 来源:www.chinab4c.com 作者:ecshop专家

get_extension_goods
这个函数 从注释来看 是取所有扩展分类是指定分类的产品id
问题来了
他把我所有没有任何扩展分类的产品都取到了,很是郁闷

比如我有很多产品,根本就没有任何扩展分类,居然也给调出来了,搞的我很郁闷

比如我想调用cat_id是20的产品,发现调出来很多cat_id是28的产品,而cat_id是28的所有产品都没有扩展分类,

郁闷!

本想去研究下程序呢,这个函数写的也比较隐晦不好看,


不知道这个是不是bug,希望管理员看下,我再研究研究

回答:
我当初做一个模板的时候也发现这个问题,后来因为赶工没认真看,直接去掉读取拓展分类 ,

是啊,可郁闷,赶工呢
我还不能去掉它,因为有些产品是有扩展分类的

咳,

慢慢研究吧,

研究到sql了
我是调用分类id是40的产品,生成的sql如下:

AND (40 OR g.goods_id IN ('3','4','5','6',。。。。

是不是这里的问题呢?40是真的,OR后面虽然不成立,但是整个就成立了
就是说 AND 后面的cat_id限制没了,就是类别id是40的限制没有了

接着研究研究

晕死,还真是我所说的那样

把它的sql改成 g.cat_id=40就可以了

我宣布发现ecshop的一个bug

get_extension_goods 这个函数对分类的限制,函数是这样写的

if (!empty($cats))
{
$sql .= " AND (" . $cats . " OR " . get_extension_goods($cats) .")";
}

应该改成

if (!empty($cats))
{
$sql .= " AND (g.cat_id in (" . $cats . ") OR " . get_extension_goods($cats) .")";
}
因为用户可能传过来的cat_id不是一个 而是 20,30,40这样的,所以用 in

不知道对不对,反正我是实践中 这样成功了,暂时认为我发现bug了,庆祝下。!!

呵呵。。我就是那么改过来的。先去吧。吧工完成了。再研究。。bug嘛。有待商量,

不要再待啊,我第一次花这么久研究 并提出来

就是因为喜欢这个系统,要不才没心情和时间写这些呢,直接改过

希望 验证下!

俺帮你顶一下.

希望官方能给你颁奖

顺便给我提名下

恩,恩
感觉应该是他们忘了调用 get_children而是直接写cat_id了,这个里面有调用db_create_in产生 in 的操作