第一种情况:这个要删除的分类其下有子分类,要删除先删除子分类先.
举个例子:顶级分类服装
其下有衣服
其下下还有耐克
如果要删除顶级分类服装咋整。
第一步:判断它是否为空。如果为空,代表什么都没做。不理会。
第一步:获取要删除的分类的id。
第三步:先找出无限极分类所有的分类,然后通过算法找到这个服装分类其下有没有子分类。有的话,返回服装所有的子分类回来。
第四步:转换成数组格式遍历下。遍历的作用就是删除服装其下的所有子类。
第五步:遍历删除完服装其下所有子类,在删除服装这个分类。

public function del($id=''){

//如果分类id是空,则跳转到列表页面
if ($id=='') {

$this->redirect('category/index');

}



//根据id找到当前的记录
$category = Db::name('Category')->find($id);


//先找出所有分类,再根据id循环

$categorys = Db::name('Category')->field('id,parent_id')->select();
$category_model = new Categorys();

$cateStr = $category_model->getChildrenIdStr($categorys,$id);

$cate_list=explode(',',$cateStr);
foreach ($cate_list as $k => $v) {

Db::name('category')->where('id',$v)->delete();

}

Db::name('category')->where('id',$id)->delete();

return redirect('index');



}
//由父类id得到全部子类,返回字符串
public function getChildrenIdStr($cate_list,$parent_id=0){

static $str='';
foreach ($cate_list as $k => $v) {//遍历无限极分类

if ($v['parent_id']==$parent_id) {//如果这个分类是顶级分类的话,

$str =$str.','.$v['id'];//就把其下的子类一次一次的遍历赋值给$str

$this->getChildrenIdStr($cate_list,$v['id']);//无线极分类所有的分类,服装下的子类(衣服)。$v['id']的意思是记住一句话。顶级分类的id(服装)等于其下的子类(衣服)的pid。

}

}

$str=ltrim($str,',');//去掉左边所有的空格,以逗号分隔
$str=rtrim($str,',');//去掉右边所有的空格,以逗号分隔
//print_r($str);
return $str;

}

tp6删除某个分类,考虑种种情况_无限极分类