这个是原始图片,问题就是左侧分类列表,理论上点击一级分类,左侧应该出二级分类,点击二级分类左侧应该出三级分类,依次往下,点击最小层分类显示同级分类。但是现在点击二级分类或者三级分类显示为空,随排查问题,发现在
在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 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章出处。