ThinkPHP删除栏目(实现批量删除栏目)

2018-09-07 14:05

阅读:371

  前段时间发表了一个删除栏目的随笔,当时实现的功能是删除一条信息,这次来实现一下批量删除栏目。

  我们需要达到的是这样一个效果:

  

  选中批量删除按钮后可以选中所有该页面的栏目,这个是前端页面的实现,在这里就不多说了,我们直接进入正题:批量删除的功能。

  1.前端页面这里也有一个小小的点,就是选择框的name值应给给他赋值为一个id的数组,value值为该栏目的id。

  2.我们在控制器中单独写一个批量删除的方法

   public function privilege_bdel(){ $ids = I(ids); $pri = D(privilege); $ids = implode(,, $ids); if($ids){ if($pri->delete($ids)){ $this->success(批量删除栏目成功!,U(Privilege/privilege_lst)); }else{ $this->error(批量删除栏目失败,请重试!); } }else{ $this->error(未选中任何内容,请重试!); } }

  这里要将传过来的id数组转化为以逗号分隔的字符串如:1,2,3,这样可以直接进行delete操作。

  

  这就是我们dump出来options的结果,这条也是我们用来判断删除时是单个删除还是批量删除的依据,如果options[where][id]是一个数组的话,则说明进行的是批量删除,否则就是单个删除。

  3.在模型中对删除前构造函数的修改

   public function _before_delete($options){ //批量删除 if(is_array($options[where][id])){ $arr = explode(,, $options[where][id][1]); $sonpri = array(); foreach ($arr as $k => $v) { $sonpri2 = $this->childid($v); $sonpri = array_merge($sonpri,$sonpri2); } $sonpri = array_unique($sonpri); $chilrenids = implode(,, $sonpri); }else{//单个删除 $chilrenids =$this->childid($options[where][id]); $chilrenids = implode(,, $chilrenids); } if($chilrenids){ $this->execute(delete from ed_privilege where id in($chilrenids)); } }

  在这里我们写出批量删除的代码(单个删除之前已经写过,不再提)

  将传过来的字符串转化为不带逗号的数组形式存在$arr中,建立一个空数组$sonpri,然后foreach遍历,这里先查找出所有的子栏目id(会用childid函数),存入$sonpri2数组中 ,再将$sonpri和$sonpri2合并为一个数组,使用array_merge()函数完成,这样我们才算是获取到了所有子栏目的id,但是我们所获取的id组中,会出现许多重复的id,所以这里我们还要进行去重的操作,使用array_unique()函数。最后再进行一次数组的拆分,得到id字符串,再进行删除就大功告成了。

  以上这篇ThinkPHP删除栏目(实现批量删除栏目)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。


评论


亲,登录后才可以留言!