關於OT分類的一些處理

發表於2019-05-11
由於OT是支援無限極分類的。(僅表結構支援,後臺支援到三級,前臺僅二級顯示。)

在實際開發過程中,我們建立文件型別後,可能會需要多級的目錄。

而,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. 文件寫的比較亂,大家見諒。
回覆

相關文章