{dede:channel} 标签的基本语法
{dede:channel}标签有两种主要使用方式:单级栏目调用和多级栏目调用(带子栏目)。
单级栏目调用
这是最基本的形式,用于调用指定层级的栏目列表。
{dede:channel type='top' row='8'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
多级栏目调用(带子栏目)
这种形式可以调用出栏目及其下的所有子栏目,非常适合制作多级导航菜单。
{dede:channel type='son' typeid='top'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
{dede:son row='5'}
<a href="[field:typelink/]">[field:typename/]</a>
{dede:son}
</li>
{/dede:channel}
注意:
{dede:son}标签必须放在{dede:channel}标签内部使用,用来获取当前栏目的子栏目。
常用属性解析
{dede:channel}标签的强大之处在于其丰富的属性,可以精确控制调用哪些栏目以及如何显示。
| 属性名 | 含义 | 可用值 | 示例 |
|---|---|---|---|
typeid |
指定栏目ID | 栏目的数字ID | typeid='1' (调用ID为1的栏目及其子栏目) |
type |
指定栏目类型 | top (顶级栏目), son (子栏目), self (同级栏目) |
type='top' (只调用顶级栏目) |
row |
调用栏目数量 | 正整数 | row='10' (调用10个栏目) |
currentstyle |
当前栏目样式 | HTML代码 | currentstyle='<a href="[field:typelink/]" class="active">[field:typename/]</a>' |
reid |
指定父栏目ID | 栏目的数字ID | reid='5' (调用ID为5的栏目的所有子栏目) |
col |
分多少列显示 | 正整数 | col='3' (将调用的栏目分3列显示) |
tablespace |
调用附加表前缀 | 字符串 | tablespace='#@__arctype' (不常用,默认即可) |
noself |
是否包含本栏目 | yes 或 no |
noself='yes' (在调用子栏目时,不包含本栏目) |
常用字段(变量)
在标签内部,使用[field:xxx/]来输出栏目的具体信息。
| 字段名 | 含义 | 示例 |
|---|---|---|
typename |
栏目名称 | [field:typename/] |
typelink |
栏目链接 | [field:typelink/] |
id |
栏目ID | [field:id/] |
reid |
父栏目ID | [field:reid/] |
topid |
顶级栏目ID | [field:topid/] |
description |
栏目描述 | [field:description/] |
seotitle |
[field:seotitle/] |
|
litpic |
栏目缩略图 | <img src="[field:litpic/]" alt="[field:typename/]"> |
常见应用场景示例
场景1:制作网站主导航(只显示顶级栏目)
这是最常见的用法,通常放在网站的头部。
<!-- 默认首页 -->
<a href="{dede:global.cfg_cmsurl/}/" {dede:field name='typeid' runphp='yes'}(@me=='')? @me=" class='current' " : @me="";{/dede:field}>首页</a>
<!-- 调用顶级栏目,高亮显示当前栏目 -->
{dede:channel type='top' currentstyle="<a href='[field:typelink/]' class='active'>[field:typename/]</a>"}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
说明:
type='top'确保只调用顶级栏目。currentstyle属性会自动判断当前页面所属的栏目,并将其链接替换为currentstyle中定义的HTML,并填充[field:typelink/]和[field:typename/],这是实现导航高亮的关键。
场景2:制作侧边栏“栏目推荐”
假设你想在侧边栏推荐“网站建设”这个栏目及其下的5个子栏目。
<h3>网站建设</h3>
<ul>
{dede:channel typeid='1' type='son' noself='yes' row='5'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
说明:
typeid='1'假设“网站建设”栏目的ID是1。type='son'表示调用ID为1的栏目的子栏目。noself='yes'表示不显示“网站建设”这个父栏目本身,只显示子栏目。
场景3:制作面包屑导航(当前位置)
面包屑导航通常使用{dede:field name='position'/}标签,但它内部也是通过{dede:channel}的逻辑来实现的,你不需要手动写{dede:channel},直接使用官方提供的标签即可。
{dede:field name='position'/}
输出效果:首页 > 技术文章 > 织梦教程
场景4:制作带缩略图的多级栏目列表
调用顶级栏目,并在每个栏目下显示其子栏目和子栏目的缩略图。
{dede:channel type='top' row='4'}
<div class="category-box">
<h2><a href="[field:typelink/]">[field:typename/]</a></h2>
<div class="sub-category">
{dede:son row='6'}
<dl>
<dt><a href="[field:typelink/]"><img src="[field:litpic/]" alt="[field:typename/]"></a></dt>
<dd><a href="[field:typelink/]">[field:typename/]</a></dd>
</dl>
{dede:son}
</div>
</div>
{/dede:channel}
常见问题与注意事项
-
栏目ID在哪里找? 登录织梦后台,【栏目管理】 -> 选择一个栏目 -> 查看,URL中的
cid=后面的数字就是ID。 -
为什么调不出栏目?
- 检查
typeid或reid的ID是否正确。 - 检查
type属性是否符合你的需求(top,son,self)。 - 检查栏目是否被隐藏(在后台栏目编辑中,有“隐藏”选项)。
- 检查模板标签是否拼写错误,特别是
{dede:channel}和{/dede:channel}要成对出现。
- 检查
-
currentstyle不生效怎么办?- 确保你正在访问的是一个属于该栏目的页面(比如文章列表页或内容页)。
- 检查
currentstyle的语法是否正确,它是一个完整的<a>- 有时JS或CSS的权重问题会覆盖
currentstyle添加的类名,需要检查CSS样式。 - 有时JS或CSS的权重问题会覆盖
-
{dede:son}和{dede:channel type='son' ...}有什么区别?{dede:son}是{dede:channel}的内部标签,必须嵌套在{dede:channel}内部,它只负责获取当前父栏目的子栏目。{dede:channel type='son' ...}是一个独立的标签,它可以通过typeid或reid直接指定任何一个父栏目来调用其子栏目。
希望这份详细的解析能帮助你完全掌握织梦的{dede:channel}
