/////////////////////////////////////////
// 刚刚看到好像分类最多只能有 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
		}
 
                                                                
                                     阅读全文
                                
                                
                                     收起全文