商品カテゴリの再帰的削除

商品カテゴリの再帰的削除

削除 以前にも実行しましたが、少し異なります。さらに複雑ですが、最上位の列を削除するときは、最上位の列の下にあるカテゴリも削除する必要があります。

#Cate コントローラー#

 public function del($id){
        $cata=D('cate');
        $childids=$cata->getchild($id);
        $childids=implode(',',$childids);
        if($cata->delete($childids)){
          $this->success('删除栏目成功!',U('index'));
        }else{
            $this->error('删除栏目失败!');
        }
    }

#CateModel モデル レイヤー

 public function getchild($cateid){
        $data=$this->select();
        return $this->getchildids($data,$cateid);
    }
    public function getchildids($data,$cateid){
        static $res=array();
        $res[]=$cateid;
        foreach ($data as $k => $v) {
            if ($v['pid']==$cateid) {
                    $res[]=$v['id'];
                    $this->getchildids($data,$v['id']);

            }
        }
        return array_unique($res);
    }
階層的に説明しましょう

$childids=$cata->getchild($id);

getchild メソッドに id を渡します。

public function getchild($cateid){
        $data=$this->select();
        return $this->getchildids($data,$cateid);
    }

ここの getchild メソッドは、渡された ID を受け取った後、すべてのカテゴリをクエリします。 getchildids メソッドにデータと ID を返します。

  public function getchildids($data,$cateid){
        static $res=array();
        $res[]=$cateid;
        foreach ($data as $k => $v) {
            if ($v['pid']==$cateid) {
                    $res[]=$v['id'];
                    $this->getchildids($data,$v['id']);

            }
        }
        return array_unique($res);
    }

$res=array();配列を定義します。 $res[]=$cateid; 空の配列は ID の保存に使用されます。

foreach はデータを走査します。その PID が現在の ID と等しい場合、それが最上位であることを意味します。今回はIDを$に格納します。 res[]の空の配列で、再度再帰を使用します。

return array_unique($res); Eileen はこの配列を返し、array_unique は重複を削除します。

$childids=implode(',',$childids); 配列を文字列に分割すると、それを使用できるようになります。

これは、最上位の列を削除すると、複数の列を削除したことがわかります。

学び続ける
||
<?php namespace Admin\Controller; use Think\Controller; class CateController extends CommonController { public function index(){ $cate=D('cate'); $cateres=$cate->catetree(); $this->assign('cateres',$cateres);//获取栏目树 $this->display(); } public function add(){ $cate=D('cate'); if (IS_POST) { if($cate->create()){ if ($cate->add()) { $this->success('添加商品分类成功',U('Cate/add')); }else{ $this->error('添加商品分类失败!'); } }else{ $this->error($cate->getError()); } return; } $cateres=$cate->catetree(); $this->assign('cateres',$cateres); $this->display(); } public function edit(){ $cate=D('cate'); if (IS_POST) { if($cate->create()){ if ($cate->save()!== false) { $this->success('修改商品分类成功',U('Cate/index')); }else{ $this->error('修改商品分类失败!'); } }else{ $this->error($cate->getError()); } return; } $cates=$cate->find(I('id')); $cateres=$cate->catetree(); $this->assign('cateres',$cateres); $this->assign('cates',$cates); $this->display(); } public function del($id){ $cata=D('cate'); $childids=$cata->getchild($id); $childids=implode(',',$childids); if($cata->delete($childids)){ $this->success('删除栏目成功!',U('index')); }else{ $this->error('删除栏目失败!'); } } }
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜