欢迎访问爱油菜中文网!
您所在的位置:首页 > 代码学苑 > 网建教程

thinkphp无限分类原理和实现代码

作者:来源:发表于:2022-01-30 18:56:45

递归无限级分类的原理:

每一个分类都记录它的父级id,当为顶级分类时,父级id为0。这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几。

对数据进行重组,在重组的过程中,根据其父子关系,将相应的类别摆放到正确的位置。/*无限极分类列表*/

public function getTree($data='',$cate_id=0)

{

if(empty($data)){

$data = $this->order('listorder')->field('id,parent_id,cate_name,listorder')->select()->toArray();

}

return $this->_reSort($data,$cate_id);

}

//无限极分类树状结构,修改level值

/* @param $data 要遍历的分类数组

* @param $parent_id 节点pid,默认为0,表示从顶级节点开始

* @param $ret重组排序的所有后代节点

* @param $cate_level 节点层级

*/

private function _reSort($data, $parent_id=0, $cate_level=0, $isClear=TRUE)

{

//用于保存重组排序后的结果

static $ret = array();

//刚进入函数要清除上次调用此函数后留下的静态变量的值,进入深一层循环时则不要清除

if($isClear)

$ret = array();

foreach ($data as $k => $v)

{

if($v['parent_id'] == $parent_id)

{

$v['cate_level'] = $cate_level;

//找到以$parent_id为父节点的子节点,将其保存

$ret[] = $v;

unset($data[$k]);

//然后以该节点为父节点,继续找后台节点

$this->_reSort($data, $v['id'], $cate_level+1, FALSE);

}

}

return $ret;

}

调用class Category extends Base

{

public function index()

{

$category_model = new Categorys();

$categoryTree = $category_model->getTree();

return view('',[

'categoryTree' =>$categoryTree,

'left_menu' => 1,

]);

}

}