/////////////////////////////////////////
// 刚刚看到好像分类最多只能有 2 级,那么这个就不是 bug 了。
// 但是代码也不删了,如果有人需要无限级它还是可以参考一下的。
// 又看到一块代码,发现还是有 bug 的。
// —— 添加分类时可以设置无限级;
// —— 改变父节点时提示只支持 2 级分类,与前面矛盾的。
// —— 由第一个原因引起树结构显示错误,即下面代码因所说的错。若是只支持 2 级分类就正确了。
file: models/system.php
public function build_category_json($type, $parent_id = 0, $prefix = '')
{
if (!$category_list = $this->fetch_category($type, $parent_id))
{
return false;
}
if ($prefix)
{
$_prefix = $prefix . ' ';
}
foreach ($category_list AS $category_id => $val)
{
$data[] = array(
'id' => $category_id,
'title' => $_prefix . $val['title'],
'description' => $val['description'],
'sort' => $val['sort'],
'parent_id' => $val['parent_id'],
'url_token' => $val['url_token']
);
if ($val['child'])
{
$prefix .= '-';
$data = array_merge($data, json_decode($this->build_category_json($type, $val['id'], $prefix), true));
}
unset($prefix);
}
return json_encode($data);
}
代码中 unset($prefix); 的使用导致树结构层次上出现了问题。建议改为:
if ($val['child'])
{
$tmp_prefix = $prefix. '-'; // 修改 1
$data = array_merge($data, json_decode($this->build_category_json($type, $val['id'], $tmp_prefix ), true)); // 修改 2
}
//unset($prefix); // 修改 3
}
阅读全文
收起全文