먼저 렌더링
최상위 분류는 실제로는 1차 분류이고, 2차 분류는 1차 분류의 하위 분류라고도 합니다. 또한 하위 범주를 가질 수 있으므로 Infinitus 분류가 형성됩니다.
다음으로 구체적인 구현 코드를 살펴보겠습니다.
1. 컨트롤러의 필드별로 쿼리하여 모든 분류 정보를 알아냅니다(id: 카테고리의 ID 값, cate_name: 해당 카테고리의 이름). 카테고리, pid :부모 ID, 정렬: 제목 순서 표시를 준비하지만 작성할 필요는 없습니다. )
1 public function cate_display()2 {3 $cate = D('Cate'); 4 $field = array('id','cate_name','pid','sorts');5 $list = $cate->allCategory($field);6 $this->assign('list',$list);7 $this->display();8 }
2. 모델에 코드
해당 컨트롤러의 모델에 두 가지 메소드를 생성합니다
1. 모든 분류 정보를 쿼리하고 분류 트리를 생성하는 메서드를 호출합니다.
1 public function allCategory($field='*'){2 $data = $this->field($field)->select();3 return $this->tree($data);4 }
2. 분류 트리를 생성합니다(재귀 사용, 데이터 전달, pid [상위 클래스 ID], level). [레이어 수, 디스플레이 수 제어에 사용] , 초기값은 0)
1 public function tree($data,$pid=0,$level=0){ 2 static $tree = array(); 3 foreach($data as $k=>$v){ 4 if($v['pid'] == $pid){ 5 $v['level'] = $level; 6 $tree[]=$v; 7 $this->tree($data,$v['id'],$level+1); 8 } 9 }10 11 return $tree;12 }
3. 뷰 파일에 코드
1 <div class="form-group"> 2 <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label> 3 <div class="col-sm-6"> 4 <select name="pid" style="width: 100%;"> 5 <option selected="selected" value="0">顶级菜单</option> 6 <volist name="row" id="val"> 7 <option value="{$val.id}"><?php echo str_repeat('-',$val['level']*4); ?>{$val.cate_name} 8 </option> 9 </volist> 10 </select>11 </div>12 </div>
이런 식으로 분류 트리 구조를 만들 수 있습니다. 요약: 핵심 아이디어는 여전히 모델의 재귀 함수이며, pid가 먼저 전달되고 기본값은 0입니다. 반복될 때마다 전달되는 pid는 상위 레벨의 ID입니다. 재귀 수준 수를 기록합니다. 마지막으로 보기 페이지가 표시되면 PHP 내장 함수 str_repeat()를 호출하여 '-'를 반복적으로 출력하여 출력 시 다른 수준의 효과를 얻습니다.
위 내용은 무한 분류 트리 구조를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!