Maison  >  Article  >  développement back-end  >  Une brève introduction à la structure arborescente de classification Infinitus

Une brève introduction à la structure arborescente de classification Infinitus

巴扎黑
巴扎黑original
2017-08-13 10:20:362212parcourir

L'éditeur suivant vous proposera une méthode simple pour créer une arborescence de classification Infinitus. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

D'abord les rendus

La catégorie supérieure est en fait. a Classification de deuxième niveau, la classification de deuxième niveau est également appelée sous-catégorie de classification de premier niveau. Sur cette base, les sous-catégories peuvent également avoir des sous-catégories, formant ainsi une classification infinie.

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

Requête par champ dans le contrôleur pour obtenir toutes les informations de classification (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.)


public function cate_display()
  {
    $cate = D('Cate'); 
    $field = array('id','cate_name','pid','sorts');
    $list = $cate->allCategory($field);
    $this->assign('list',$list);
    $this->display();
  }

2. Coder dans le modèle

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

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


public function allCategory($field='*'){
     $data = $this->field($field)->select();
     return $this->tree($data);
   }

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


public function tree($data,$pid=0,$level=0){
    static $tree = array();
    foreach($data as $k=>$v){
      if($v['pid'] == $pid){
        $v['level'] = $level;
        $tree[]=$v;
        $this->tree($data,$v['id'],$level+1);
      }
    }
  
    return $tree;
  }

Trois, le code dans le fichier de vue


<p class="form-group">
        <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label>
        <p class="col-sm-6">
          <select name="pid" style="width: 100%;">
            <option selected="selected" value="0">顶级菜单</option>
            <volist name="row" id="val"> 
              <option value="{$val.id}"><?php echo str_repeat(&#39;-&#39;,$val[&#39;level&#39;]*4); ?>{$val.cate_name}
              </option> 
            </volist> 
          </select>
        </p>
      </p>
De cette manière, une structure arborescente de classification qui peut être infiniment récursive est complétée. Résumé : Le noyau. l'idée est toujours dans le modèle Pour une fonction récursive, le pid est passé en premier et est par défaut à zéro. Le pid transmis à chaque fois qu'il est récursif est l'identifiant du supérieur. Le niveau est utilisé pour enregistrer le nombre de niveaux de récursion. Enfin, lorsque la page d'affichage est affichée, la fonction intégrée PHP str_repeat() est appelée pour répéter la sortie '-' afin d'obtenir l'effet de différents niveaux 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!

Déclaration:
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