由於OT是支援無限極分類的。(僅表結構支援,後臺支援到三級,前臺僅二級顯示。)
在實際開發過程中,我們建立文件型別後,可能會需要多級的目錄。
而,OT的CategoryWidget內,存在兩個呼叫函式。
分別是(位於 CategoryModel.class.php):
getTree (獲取分類樹,指定分類則返回指定分類極其子分類,不指定則返回所有分類樹)
getSameLevel (獲取指定分類的同級分類)
因為我前臺設計的頁面,需要用到三級,所以,我新增一個獲取當前分類的下級分類。
考慮到大家可能會用到,所以發個帖提示一下大家。
其實getTree返回的資料已經是包含著下級分類了。
但是官方的CategoryWidget模板是不支援的。
但如果是無限級分類的話,需要使用到遞迴樹。
PS. 在獲取所有分類(指定分類)後,將資料在此函式走一下,就可以了。
PS. 文件寫的比較亂,大家見諒。
在實際開發過程中,我們建立文件型別後,可能會需要多級的目錄。
而,OT的CategoryWidget內,存在兩個呼叫函式。
分別是(位於 CategoryModel.class.php):
getTree (獲取分類樹,指定分類則返回指定分類極其子分類,不指定則返回所有分類樹)
getSameLevel (獲取指定分類的同級分類)
因為我前臺設計的頁面,需要用到三級,所以,我新增一個獲取當前分類的下級分類。
/** * 獲取指定分類的下級目錄 * @param integer $id 分類ID * @param array/boolean $field 查詢欄位 * @return array * @author Anymagic */ public function getNextLevel($id, $field = true){ if(is_numeric($id)){ $map = array('pid' => $id, 'status' => 1); return $this->field($field)->where($map)->order('sort')->select(); } return false; }
考慮到大家可能會用到,所以發個帖提示一下大家。
其實getTree返回的資料已經是包含著下級分類了。
但是官方的CategoryWidget模板是不支援的。
<volist name="category" id="cate"> <li <eq name="current" value="$cate['id']"> class="active" </eq> > <a href="{:U('Article/lists?category='.$cate['name'])}"> <i class="icon-chevron-right"></i>{$cate.title} </a> </li> </volist>從結構上了來看,如果需要支援下級,可以做一個判斷,然後迴圈一次。
<volist name="category" id="cate"> <li <eq name="current" value="$cate['id']"> class="active" </eq> > <a href="{:U('Article/lists?category='.$cate['name'])}"> <i class="icon-chevron-right"></i>{$cate.title} </a> <if condition="count($cate['_']) neq 0 "> <ul class="next-nav"> <volist name="cate['_']" id="catenext"> <li> <a href="{:U('Article/lists?category='.$catenext['name'])}"> <i class="icon-chevron-right"></i>{$catenext.title} </a> </li> </volist> </ul> </if> </li> </volist>那麼這樣的渲染方式,即可做到顯示下級分類。
但如果是無限級分類的話,需要使用到遞迴樹。
PS. 在獲取所有分類(指定分類)後,將資料在此函式走一下,就可以了。
/** * @param array $data 分類資料 * @param integer $cate 指定分類ID,用於高亮 * @return html * @author Anymagic */ public function htmlTpl($data, $cate = ''){ $html = ''; foreach ($data as $key => $value) { if(empty($value['_'])){ if(!empty($cate) && $cate == $value['id']){ $html .= '<li class="active">'; }else{ $html .= '<li>'; } $html .= '<a href="'.U('Article/lists?category='.$value['name']).'">'; $html .= '<i class="icon-chevron-right"></i>'.$value['title']; $html .= '</a>'; $html .= '</li>'; }else{ $html .= '<li>'; $html .= '<a href="'.U('Article/lists?category='.$value['name']).'">'; $html .= '<i class="icon-chevron-right"></i>'.$value['title']; $html .= '</a>'; $html .= '<ul class="nav-next">'; $html .= $this->htmlTpl($value['_']); $html .= '</ul>'; $html .= '</li>'; } } return $html; }這樣的話,即可支援無限級分類的顯示。
PS. 文件寫的比較亂,大家見諒。