在模板页中获取栏目分类使用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| 分类图标|