在模板頁中獲取欄目分類使用channel標簽,標簽用法:
~~~
{zz:channel?type="top"}
<a href="{$field['url']}">{$field['title']}</a>
{/zz:channel}
~~~
>[danger] channel標簽輸出的是欄目分類,是數據列表,是個循環,所以它是閉合標簽。
channel標簽有哪些屬性?
* type(篩選類型,屬性值包括top、son、self、find、parent、root、where、ids)
* typeid(欄目類型id)
* row(要顯示數據的條數)
* void(數據項別名,默認使用變量field來讀取字段信息。而你可以通過該變量定義為其他變量名)
* where(可直接寫sql語句,一般為type="where"時使用,此操作讀取數據庫,非緩存!)
* orderby(排序,排序有兩種類型,一是正序asc,一是倒序desc。一般以創建時間降序排序:orderby="create_time desc"。`注意:orderby屬性只在type="where"起作用`)
* display (可見性,欄目有顯示和隱藏屬性,display屬性一般用來讀取已被隱藏的欄目數據(display=0);默認為display=1,即讀取顯示的欄目數據。)
## channel標簽比較常用的的幾種場景
### 1、顯示網站導航
~~~
<ul>
{zz:channel?type="top"}
<li>
<a href="{$field['url']}">{$field['title']}</a>
</li>
{/zz:channel}
</ul>
~~~
代碼分解:
* type="top" 是指定讀取頂級欄目分類,也就是欄目分類的pid=0的分類。
* $field\['url'\] 是字段,顯示該欄目分類的鏈接地址。
* $field\['title'\] 是字段,顯示該欄目分類的標題。
### 2、顯示含有二級導航的導航欄
~~~
<ul>
{zz:channel?type="top"}
<li>
<a?href="{$field['url']}">{$field['title']}</a>
<dl>
{zz:channel?type="son"?typeid="$field['id']"?void="child"}
<dd>
<a?href="{$child['url']}">{$child['title']}</a>
</dd>
{/zz:channel}
</dl>
</li>
{/zz:channel}
</ul>
~~~
代碼分解
* channel標簽可以無限極嵌套
* type="top" 是指定讀取頂級欄目分類,也就是欄目分類的pid=0的分類。
* type="son" 是指定讀取某一欄目分類下的下級欄目。所以當你使用type="son"時,你需要指定typeid屬性值。
* typeid="$field\['id'\]" 是指定上級的id,用來讀取該上級id下的子級欄目分類。typeid可以是數字,也可以是變量(正如上方代碼一樣)。
* void="child" 是指定了數據項的別名。因為這里用了標簽嵌套,為了區別頂級導航和二級導航,所以用到了數據項別名。
* $field['url'] 是字段,顯示該欄目分類的鏈接地址。
* $field['title'] 是字段,顯示該欄目分類的標題。
* $child['url']}同$field['url'] 。
* $child['title']}同$field['title'] 。
### 3、在列表頁(article/lists)或者詳情頁(article/detail)中,顯示當前欄目的下級欄目分類
~~~
<ul>
{zz:channel type="root" }
{zz:channel type="son" typeid="$field['id']" void="vo"}
<li>
<a href="{$vo['url']}">{$vo['title']}</a>
</li>
{/zz:channel}
{/zz:channel}
</ul>
~~~
代碼分解:
* type="root" 是指定讀取某一欄目的根分類,即最頂級欄目。這里我們沒有指定typeid屬性的值,是因為系統會默認根據當前頁面的欄目id,顯示其頂級欄目。此設計,可以滿足不同頁面,顯示的欄目分類不同。當然如果你打算固定顯示某一分類下的子欄目,指定其typeid屬性即可!
* type="son" 是指定讀取某一欄目分類下的下級欄目。
* typeid="$field['id']" 是最頂級欄目的欄目id,用來讀取該頂級id下的子級欄目分類。
* void="vo" 是指定了數據項的別名。因為這里用了標簽嵌套,為了區別頂級欄目和子級欄目,所以用到了數據項別名。
* $vo['url'] 是字段,顯示該欄目分類的鏈接地址。
* $vo['title'] 是字段,顯示該欄目分類的標題。
### 4、讀取某欄目下的下級欄目分類,但不想全部讀取。
~~~
<ul>
{zz:channel?type="son"?typeid="84"?row="8"}
<li>
<a?href="{$field['url']}">{$field['title']}</a>
</li>
{/zz:channel}
</ul>
~~~
代碼分解:
* type="son" 是指定讀取某一欄目分類下的下級欄目。所以配合著type="son",你需要指定typeid屬性值。
* typeid="84" 是指定上級的id,用來讀取該上級id的下級欄目分類。typeid可以是數字,也可以是變量。
* $field['url'] 是字段,顯示該欄目分類的鏈接地址。
* $field['title'] 是字段,顯示該欄目分類的標題。
* row="8" 是指只讀取8條數據
### 5、顯示當前欄目的同級欄目分類
~~~
<ul>
{zz:channel?type="self"?}
<li>
<a?href="{$field['url']}">{$field['title']}</a>
</li>
{/zz:channel}
</ul>
~~~
代碼分解:
* type="self" 是指定讀取某一欄目分類下的同級欄目。這里我們沒有指定typeid屬性的值。系統默認會根據當前頁面的欄目id,顯示其同級欄目。此設計,可以滿足不同頁面,顯示的欄目分類不同。當然如果你打算固定顯示某一分類下的同欄目,指定其typeid屬性即可!
### 6、讀取一個或多個指定id的欄目分類
~~~
<ul>
{zz:channel?type="ids" typeid="1,3,8"?}
<li>
<a?href="{$field['url']}">{$field['title']}</a>
</li>
{/zz:channel}
</ul>
~~~
代碼分解:
* type="ids" 是讀取一個或多個指定id的欄目分類。這里我們需要指定typeid屬性的值。
* typeid="1,3,8"? 是指讀取 id=1、id=3、id=8的欄目分類,根據指定的多個欄目id,以`英文逗號`的方式隔開,以獲得欄目列表。
>[warning] 說明:typeid可以通過后來“欄目分類”中的欄目列表獲得。

### channel標簽可讀取字段明細
| 字段 | 名稱 |
| --- | --- |
| id | 主鍵 |
| title |標題 |
| sort| 排序 |
| meta_title |seo的網頁標題|
| keywords| 關鍵詞 |
| description | 描述 |
| url | 鏈接地址 |
| create_time| 創建時間 |
| update_time| 更新時間|
| icon| 分類圖標|