Comment créer une arborescence de classification infinie

巴扎黑
Libérer: 2023-03-10 20:48:02
original
1127 Les gens l'ont consulté

D'abord les rendus

La classification de premier niveau est en fait la classification de premier niveau, et la classification de deuxième niveau est également appelée la sous-catégorie du premier classification à plusieurs niveaux. Sur cette base, la sous-catégorie Vous pouvez également avoir des sous-catégories, formant ainsi une catégorie infinie.

Regardons le code d'implémentation spécifique :

1. Requête par champ dans le contrôleur, et la requête. sera Toutes les informations sur la catégorie (id : la valeur ID de la catégorie, cate_name : le nom de la catégorie, pid : l'ID parent, sorts : préparation à l'affichage du tri par ordre de titre, facultatif.)

1     public function cate_display()2     {3         $cate = D('Cate'); 
4         $field = array('id','cate_name','pid','sorts');5         $list = $cate->allCategory($field);6         $this->assign('list',$list);7         $this->display();8     }
Copier après la connexion

2. Coder dans le modèle

Créer deux méthodes dans le modèle correspondant au contrôleur

1. Interroger toutes les informations de classification et appeler la méthode pour générer un arbre de classification :

1 public function allCategory($field='*'){2         $data = $this->field($field)->select();3         return $this->tree($data);4     }
Copier après la connexion

2. Générer un arbre de classification (utiliser la récursivité, transmettre les données et deux variables pid [identifiant de classe parent], niveau [nombre de couches, utilisées pour contrôler le nombre de affiche], initiale La valeur est zéro)

 1 public function tree($data,$pid=0,$level=0){ 2         static $tree = array(); 3         foreach($data as $k=>$v){ 4             if($v['pid'] == $pid){ 5                 $v['level'] = $level; 6                 $tree[]=$v; 7                 $this->tree($data,$v['id'],$level+1); 8             } 9         }10     11         return $tree;12     }
Copier après la connexion

3. Le code dans le fichier de vue

 1 <div class="form-group"> 2                 <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label> 3                 <div class="col-sm-6"> 4                     <select name="pid" style="width: 100%;"> 5                         <option selected="selected" value="0">顶级菜单</option> 6                         <volist name="row" id="val">  
 7                             <option value="{$val.id}"><?php echo str_repeat(&#39;-&#39;,$val[&#39;level&#39;]*4); ?>{$val.cate_name} 8                             </option>  
 9                         </volist>  
10                     </select>11                 </div>12             </div>
Copier après la connexion

De cette façon, une structure arborescente de classification qui peut être infiniment récursive est complétée. Résumé : L'idée principale est toujours la fonction récursive dans le modèle. Le pid transmis en premier est zéro par défaut. est l'identifiant du niveau supérieur.Le niveau est utilisé pour enregistrer le numéro de couche récursive, et enfin, lorsque la page d'affichage est affichée, la fonction intégrée PHP str_repeat() est appelée pour afficher à plusieurs reprises '-' pour obtenir l'effet de. distinguer les séries lors de la sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal