ホームページ >バックエンド開発 >PHPチュートリアル >Infinitus 分類ツリー構造を作成する方法
この記事では主に、無限分類木構造を作成する簡単な方法を紹介します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。
まずレンダリング
最上位の分類は実際には第一レベルの分類であり、これに基づいて、第二レベルの分類は第一レベルの分類のサブカテゴリとも呼ばれます。 -category にはサブカテゴリを含めることもできるため、Infinitus 分類が形成されます。
具体的な実装コードを見てみましょう:
1. コントローラーのフィールドごとにクエリを実行して、すべての分類情報をクエリします (id: カテゴリの ID 値、cate_name: カテゴリの名前、pid: 親 ID、ソート:タイトル順を表示するための準備としては、記述する必要はありません。)
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. 分類ツリーを生成します (再帰を使用し、データと 2 つの変数 pid [親クラス ID]、レベル [表示数の制御に使用されるレイヤーの数]、初期値はゼロです)
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 は最初に渡され、デフォルトは 0 で、次に各再帰で渡されます。pid は上位レベルの ID であり、level は再帰レベルの数を記録するために使用されます。最後に、ビュー ページが表示されるときに、PHP が構築されます。 -in 関数 str_repeat() を呼び出して「-」を繰り返し出力し、出力中にレベルを区別する効果を実現します。
関連する推奨事項:
分類木を生成するためのInfinitus分類の実装方法の紹介
以上がInfinitus 分類ツリー構造を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。