次のエディターは、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. 分類ツリーを生成します
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('-',$val['level']*4); ?>{$val.cate_name} </option> </volist> </select> </p> </p>
このようにして、分類ツリーが作成されます無限に再帰できる構造が完成しました。 要約: 中心となるアイデアは依然としてモデル内の再帰関数です。デフォルトでは、再帰的に毎回渡される pid は上位レベルの ID です。最後に、ビュー ページが表示されると、関数 str_repeat() が呼び出され、出力時に系列を区別する効果を得るために「-」を繰り返し出力します。
以上がInfinitus 分類ツリー構造の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。