thinkphp5无限级分类分类的修改

前端模板C层点击事件时,传入要删除的id数据:

<a href="#" onClick="warning('确实要删除吗', '{:url('del',array('id'=>$cate['id']))}')" class="btn btn-danger btn-sm shiny">

                                                <i class="fa fa-trash-o"></i> 删除

                                            </a>

删除分类:

public function del(){

    $del=db('cate')->delete(input('id'));//删除的事单个id的分类

    if($del){

    $this->success('删除成功',url('lst'));

    }else{

    $this->error('删除失败');

    }

    }

不过由于有的分类具有多个子栏目的情况,所以要设置一个删除这个栏目下相应子栏目的方法,原理是获取 所要删除栏目下pid的值,循环获取所有这一pid栏目的id,删除这些id就实现了删除子栏目

控制器层要用到前置操作

可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。

['except' => '方法名,方法名']

表示这些方法不使用前置方法,

['only' => '方法名,方法名']

表示只有这些方法使用前置方法。

根据官方解释,我们用only方法

 protected $beforeActionList = [

        //'first',

        //'second' =>  ['except'=>'hello'],

        'delsoncate'  =>  ['only'=>'del'],//执行del方法前执行delsoncate方法

    ];

然后建立delsoncate方法

 //删除子栏目

    public function delsoncate(){

    $cateid=input('id');//要删除的主id

        $cate=new CateModel();

        $sonids=$cate->getchilrenid($cateid);//$sonids子栏目id,getchilrenid方法在M层获得子栏目id的操作

        if($sonids){

        db('cate')->delete($sonids);//删除操作

        }

    }

根据上面getchilrenid($cateid)获取子栏目的方法,我们在M层中操作:

//根据删除栏目id获取该栏目下的所有子栏目id

    public function getchilrenid($cateid){

          //获取所有栏目id的方法

    $cateres=$this->select();

    return $this->_getchilrenid($cateres,$cateid);//传递栏目数据到_getchilrenid方法

    }

     public function _getchilrenid($cateres,$cateid){

    static $arr=array();//静态化空数组

    foreach($cateres as $k=>$v){//循环获得的所有数据

    if($v['pid']==$cateid){//判断pid也就是上级栏目id等于栏目id,

                 $arr[]=$v['id'];//则把这一pid下的所有id存放到数组中,也就是获得所有子栏目

                 $this->_getchilrenid($cateres,$v['id']);//执行这个方法

    }

    }

    return $arr;//返回数组数据,让控制器层使用

    }

标签: thinkphp5无限级分类

发表评论:

whatsapp营销