이 기사에서는 주로 무한 분류 트리 구조를 만드는 간단한 방법을 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리고자 합니다. 편집자를 따라가서 모두에게 도움이 되기를 바랍니다.
먼저 렌더링
최상위 분류는 실제로는 1차 분류이고, 2차 분류는 1차 분류의 하위 분류라고도 합니다. -카테고리는 하위 카테고리를 가질 수도 있으므로 인피니투스 분류를 형성합니다.
구체적인 구현 코드를 살펴보겠습니다.
1. 모든 분류 정보를 쿼리하기 위해 컨트롤러의 필드별로 쿼리합니다(id: 카테고리의 ID 값, cate_name: 카테고리 이름, pid: 상위 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. 모델에 코드
해당 컨트롤러의 모델에 두 가지 메소드를 생성합니다
1. 분류 트리 생성 방법:
public function allCategory($field='*'){ $data = $this->field($field)->select(); return $this->tree($data); }
2. 분류 트리 생성(재귀 사용, 데이터 전달 및 두 변수 pid [상위 클래스 ID], 레벨 [레이어 수, 디스플레이 수 제어에 사용) , 초기값은 0)
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; }
Three , 뷰 파일의 코드
<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은 재귀 수준 수를 기록하는 데 사용됩니다. 내장 함수 str_repeat()를 호출하면 '-'를 반복적으로 출력하여 출력 시 레벨 구분 효과를 얻을 수 있습니다.
관련 권장 사항:
php는 재귀 없이 Infinitus 분류 트리를 구현합니다
분류 트리를 생성하기 위한 Infinitus 분류 구현 방법 소개
위 내용은 Infinitus 분류 트리 구조를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!