ホームページ >バックエンド開発 >PHPチュートリアル >Infinitus 分類ツリー構造の簡単な紹介

Infinitus 分類ツリー構造の簡単な紹介

巴扎黑
巴扎黑オリジナル
2017-08-13 10:20:362261ブラウズ

次のエディターは、Infinitus 分類ツリー構造を作成する簡単な方法を提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして見てみましょう

まず、レンダリングです

最上位の分類は実際には第 1 レベルの分類であり、第 2 レベルの分類はサブレベルとも呼ばれます。これに基づいて、サブカテゴリ カテゴリにもサブカテゴリが存在し、無限のカテゴリが形成されます。

次に、特定の実装コードを見てみましょう:

1. コントローラーのフィールドごとにクエリを実行して、すべての分類情報を見つけます (id: カテゴリの ID 値、cate_name: カテゴリの名前category, pid :Parent ID,sorts: タイトル順を表示するための準備をしますが、記述する必要はありません)


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. 対応するモデル内にメソッドを2つ作成します。コントローラー

1. すべての分類情報をクエリし、分類ツリーを生成するメソッドを呼び出します:

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


2. 分類ツリーを生成します

(再帰を使用し、データを渡し、pid [親クラス ID]) 、レベル [レイヤーの数、表示 - 数量の制御に使用] 2 つの変数、初期値はゼロ)

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


3. ビュー ファイル内のコード

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

このようにして、分類ツリーが作成されます無限に再帰できる構造が完成しました。 要約: 中心となるアイデアは依然としてモデル内の再帰関数です。デフォルトでは、再帰的に毎回渡される pid は上位レベルの ID です。最後に、ビュー ページが表示されると、関数 str_repeat() が呼び出され、出力時に系列を区別する効果を得るために「-」を繰り返し出力します。

以上がInfinitus 分類ツリー構造の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。