在模板页中获取栏目分类使用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可以通过后来“栏目分类”中的栏目列表获得。
![](https://img.kancloud.cn/53/78/5378c35db24ba7a88656988124cd93e4_733x295.png)
### channel标签可读取字段明细
| 字段 | 名称 |
| --- | --- |
| id | 主键 |
| title |标题 |
| sort| 排序 |
| meta_title |seo的网页标题|
| keywords| 关键词 |
| description | 描述 |
| url | 链接地址 |
| create_time| 创建时间 |
| update_time| 更新时间|
| icon| 分类图标|