无限极分类 数据表 id name pid 三个字段,pid是上级分类的id,是核心
分类实现自定义树形的格式
1 ***1.1 *******1.1.1 2 ***2.1 ********2.1.1 ***2.2
这种格式↑
下面是代码 model层的静态方法 直接Model::function即可
//递归调用 --无限极分类 格式化
public static function catetree($pid = 0, &$res = [], $level = 0)
{
$data = self::all(['pid'=>$pid]);
foreach ($data as $k=>$v){
$v['cate_name'] = str_repeat('● — — ',$level).$v['cate_name'];
$res[] = $v;
self::catetree($v['id'],$res,$level+1);
}
return $res;
}
// 获取当前id下所有的子分类
public static function getChildrenId($id,&$res = []){
$data = self::all(['pid'=>$id]);
foreach ($data as $k=>$v){
$res[] = $v['id'];
self::getChildrenId($v['id'],$res);
}
return $res;
}
下面是控制器的示范代码
首先是树形显示的 , 至于视图中直接正常volist循环即可 {volist id=“vo” name=“data”}
public function list()
{
$data = CateModel::catetree();
$this->view->assign('data',$data);
return $this->view->fetch('list');
}
到了删除的具体实现了 这是我自己反复写的,这样提示严谨些
public function delete($id)
{
//获取子分类的id (数组)
$childrenId = CateModel::getChildrenId($id);
//如果有子分类,则删除子分类
if ($childrenId){
$delchild = CateModel::destroy($childrenId);
}
$del = CateModel::destroy($id);
if (isset($delchild) && $del){
$this->success('删除栏目及子栏目成功!','cate/list');
}
else{
if ($del){
$this->success('删除栏目成功!','cate/list');
}else{
$this->error('删除栏目失败!','cate/list');
}
}
}