無(wú)限級(jí)分類(上)
無(wú)限級(jí)分類
什么是無(wú)限級(jí)分類:
無(wú)限極分類說(shuō)簡(jiǎn)單點(diǎn)就是一個(gè)類可以分成一個(gè)分子類,然后一個(gè)子類又可以分另一個(gè)子類這樣無(wú)限分下去,就是好象windows可以新建一個(gè)文件夾,然后在這個(gè)文件夾里又可以建一個(gè)文件夾。
public function index(){ $cate=D('cate'); $cateres=$cate->catetree(); $this->assign('cateres',$cateres); $this->display(); }
先在index控制器編寫模版,$cateres調(diào)用catetree()方法。
catetree()方法寫在分類模型層如下
<?php namespace Admin\Model; use Think\Model; class CateModel extends Model { protected $_validate = array( array('catename','require','管理員名稱不得為空!',1), ); public function catetree(){ $data=$this->order('id desc')->select(); return $this->resort($data); } public function resort($data,$pid=0,$level=0){ static $arr=array(); foreach ($data as $k => $v) { if ($v['pid']==$pid) { $v['level']=$level; $arr[]=$v; $this->resort($data,$v['id'],$level+1); } } return $arr; } }
下面我們來(lái)依次講解如何實(shí)現(xiàn)。
catetree方法
獲取數(shù)據(jù),$this的意思是調(diào)用自身來(lái)查詢,使用id來(lái)進(jìn)行排序。return返回查詢出來(lái)的結(jié)果。
resort方法
$data:獲取的數(shù)據(jù)
$pid=0:頂級(jí)分類0開(kāi)始
$level=0 分類級(jí)別
先創(chuàng)建一個(gè)空數(shù)組用來(lái)存放數(shù)據(jù),foreach來(lái)遍歷,如果$v['pid']==$pid意思是頂級(jí)id的話,那么$v['level']=$level也是頂級(jí)分類,講查詢的數(shù)據(jù)存放到數(shù)組中,接下來(lái)繼續(xù)調(diào)用自身$this->resort($data,$v['id'],$level+1); ?這里$data等于$data ??$v['id']等于$pid,$level+1代表$level每次加1。查出來(lái)的結(jié)果如下、
我們繼續(xù)添加幾個(gè)來(lái)查看
這就是我們的無(wú)限級(jí)分類的簡(jiǎn)單原理。