改了个BUG,关于分类列表页面左侧分类显示问题

bug问题 · OneSmile · 于 4年前 发布 · 1584 次阅读

这个是原始图片,问题就是左侧分类列表,理论上点击一级分类,左侧应该出二级分类,点击二级分类左侧应该出三级分类,依次往下,点击最小层分类显示同级分类。但是现在点击二级分类或者三级分类显示为空,随排查问题,发现在

在CategoryMysqldb.php里面,第514行 $id = $category['id']; 应该改为 $id = $category['_id'];原因是第486行 '_id' => $currentId,Key值是"_id",解决了第一层和最终层问题,发现中间层还没有解决,再查发现第476行函数getFilterCategory原始代码如下

    public function getFilterCategory($category_id, $parent_id)
    {
        $returnData = [];
        $primaryKey = $this->getPrimaryKey();
        $currentCategory = $this->_categoryModel->findOne($category_id);
        $currentCategory =$this->unserializeData($currentCategory) ;
        $currentUrlKey = $currentCategory['url_key'];
        $currentName = $currentCategory['name'];
        $currentId = $currentCategory['id'];
        $returnData['current'] = [
            '_id'        => $currentId,
            'name'       => $currentName,
            'url_key'    => $currentUrlKey,
            'parent_id'  => $currentCategory['parent_id'],
        ];
        if ($currentCategory['parent_id']) {
            $allParent = $this->getParentCategory($currentCategory['parent_id']);
            $allParent[] = $returnData['current'];
            $data = $this->getAllParentCate($allParent);
        } else {
            $data = $this->getOneLevelCateChild($returnData['current']);
        }
        return $data;
    }

分类信息传递混乱,改为如下代码

public function getFilterCategory($category_id, $parent_id)
    {
        $returnData = [];
        $primaryKey = $this->getPrimaryKey();
        $currentCategory = $this->_categoryModel->findOne($category_id);
        $currentCategory =$this->unserializeData($currentCategory) ;
        $currentUrlKey = $currentCategory['url_key'];
        $currentName = $currentCategory['name'];
        $currentId = $currentCategory['id'];
        $returnData['current'] = [
            '_id'        => $currentId,
            'name'       => $currentName,
            'url_key'    => $currentUrlKey,
            'parent_id'  => $currentCategory['parent_id'],
        ];
        if ($currentCategory['parent_id']) {
            $allChild = $this->getChildCategory( $currentId);
            if(is_array($allChild) && !empty($allChild)){
                $data = $this->getAllParentCate($allChild);
            }else{
                $allParent[] = $returnData['current'];
                $data = $this->getAllParentCate($allParent);
            }

        } else {
            $data = $this->getOneLevelCateChild($returnData['current']);
        }

        return $data;
    }

完美解决

本文由 OneSmile 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。

共收到 4 条回复
OneSmile#14年前 0 个赞

实现效果

Fecmall#24年前 0 个赞

多谢。

这个是fecmall-2版本,用MySQL替代mongodb 部分的bug。

Fecmall#34年前 0 个赞

1.你改的不对,至少不是fecmall原来的本意

2.github代码提交:https://github.com/fecshop/yii2_fecshop/commit/452b18344127130552169b779c42a39a86cd1ffa

3.当然,可能不满足你的要求,您可以自己修改成自己想要的

OneSmile#44年前 0 个赞

@Fecmall #3楼 是的,函数那块,主要跟业务逻辑,有的需要全部显示分类,有的需要我这样的,有的需要只显示兄弟分类,上级分类,需求不一样,改造就不一样

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics