Suppression récursive de la catégorie de produit

Suppression récursive des catégories de produits

Nous l'avons déjà fait, mais c'est un peu différent La suppression des catégories est plus compliquée. Lorsque nous supprimons la colonne du haut, nous devons également supprimer les catégories en dessous. colonne supérieure.

Cate Controller

 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 model layer

 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);
    }

Expliquons-le en couches

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

L'identifiant est transmis à la méthode getchild.

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

La méthode getchild ici interroge toutes les catégories après avoir reçu l'identifiant transmis. Renvoie les données et l'identifiant à la méthode getchildids.

  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();Définissez un tableau. $res[]=$cateid; Le tableau vide est utilisé pour stocker l'identifiant

foreach est utilisé pour parcourir les données. Lorsque son pid est égal à l'identifiant actuel, cela signifie qu'il s'agit du niveau supérieur. l'identifiant est stocké dans le tableau vide $res[] , appelez à nouveau de manière récursive.

return array_unique($res); Eileen renvoie ce tableau, array_unique supprime les doublons.

$childids=implode(',',$childids); Divisez le tableau en chaînes et vous pouvez l'utiliser.

C'est à ce moment-là que vous supprimez les colonnes de niveau supérieur et vous constaterez que vous en avez supprimé plusieurs.

Formation continue
||
<?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('删除栏目失败!'); } } }
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel