核心标签:{dede:channel}
调用子栏目的核心标签是 {dede:channel},它是一个功能非常强大的循环标签,专门用于获取栏目列表。

(图片来源网络,侵删)
基础用法
最基本的用法是获取当前栏目的所有一级子栏目。
{dede:channel type='son' currentstyle='active'}
<a href='[field:typelink/]'>[field:typename/]</a>
{/dede:channel}
标签参数解释:
type='son': 这是最关键的参数,它指定了获取的栏目类型为“子栏目”。son: 获取当前栏目的子栏目。self: 获取当前栏目本身。top: 获取顶级栏目。sun: 获取所有子孙栏目(递归)。
currentstyle='active': 用于设置当前所在子栏目的样式,当用户访问的页面是这个子栏目时,<a>标签会被替换为currentstyle指定的内容。currentstyle='<li class="active"><a href="[field:typelink/]">[field:typename/]</a></li>'。
字段说明 ([field:xxx/]):
[field:typelink/]: 子栏目的链接地址。[field:typename/]: 子栏目的名称。[field:id/]: 子栏目的 ID。[field:seotitle/]: 子栏目的 SEO 标题。[field:litpic/]: 子栏目的缩略图。
在当前栏目页调用其子栏目
这是最常见的场景,比如在“新闻中心”页面,下方列出“公司新闻”、“行业动态”、“技术分享”等子栏目。

(图片来源网络,侵删)
模板代码:
假设你的栏目页模板文件是 list_article.htm。
<div class="sub-category">
<h3>子栏目列表</h3>
<ul>
{dede:channel type='son' row='8'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
</li>
{/dede:channel}
</ul>
</div>
代码解释:
{dede:channel type='son'}: 告诉 DedeCMS,获取当前页面对应栏目的所有子栏目。row='8': (可选) 限制只显示 8 个子栏目。- 循环体内的
<li><a>...</a></li>就是每个子栏目的 HTML 结构。 [field:typelink/]和[field:typename/]分别被替换为子栏目的链接和名称。
在首页调用指定顶级栏目的子栏目
有时我们想在首页的某个位置,产品展示”区域,直接调用“产品展示”这个顶级栏目下的所有子栏目(如“产品A”、“产品B”)。
这需要用到 typeid 参数来指定栏目 ID。
操作步骤:
- 找到栏目ID:进入 DedeCMS 后台 -> “栏目” -> “栏目管理”,找到你想要调用的顶级栏目(如“产品展示”),记下它的 ID(假设为
5)。 - 在首页模板中使用
typeid:
模板代码:
<div class="product-category">
<h3>我们的产品</h3>
<ul>
{dede:channel type='son' typeid='5' row='10'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
</li>
{dede:channel}
</ul>
</div>
代码解释:
typeid='5': 关键参数,明确指定了要获取 ID 为5的栏目的子栏目,如果没有这个参数,type='son'默认会获取当前栏目(首页没有栏目概念,所以可能为空)的子栏目。row='10': (可选) 限制显示 10 个子栏目。
调用当前栏目的所有子孙栏目(递归)
如果你的栏目结构很深,产品” -> “系列A” -> “型号1”,你想在“产品”页面同时列出“系列A”、“系列B”以及“型号1”、“型号2”等所有层级的栏目,可以使用 type='sun'。
模板代码:
<div class="all-category">
<h3>所有产品分类</h3>
<ul>
{dede:channel type='sun' currentstyle='<li class="current"><a href="[field:typelink/]">[field:typename/]</a></li>'}
<li>
<a href="[field:typelink/]">[field:typename/]</a>
</li>
{/dede:channel}
</ul>
</div>
代码解释:
type='sun': 这个参数会递归地获取当前栏目下的所有层级的子栏目,包括孙子栏目、曾孙子栏目等。- 这种用法通常配合 CSS 样式来实现多级菜单的展开/折叠效果。
带缩略图的子栏目调用
如果你想在子栏目列表中显示每个栏目设置的缩略图,可以使用 [field:litpic/] 字段。
模板代码:
<div class="sub-category-with-img">
<ul>
{dede:channel type='son' row='6'}
<li>
<a href="[field:typelink/]">
<img src="[field:litpic/]" alt="[field:typename/]" />
<span>[field:typename/]</span>
</a>
</li>
{/dede:channel}
</ul>
</div>
代码解释:
[field:litpic/]: 获取该子栏目在后台设置的“缩略图”字段,如果某个子栏目没有设置缩略图,这里可能会显示一个默认图片或为空。- 你需要配合 CSS 来美化这个列表,使其以图片+文字的形式展示。
总结与注意事项
| 需求场景 | 核心标签和参数 | 说明 |
|---|---|---|
| 在当前栏目页调用其子栏目 | {dede:channel type='son'} |
最常用的方法,无需 typeid。 |
| 在首页调用指定顶级栏目的子栏目 | {dede:channel type='son' typeid='栏目ID'} |
需要知道目标顶级栏目的 ID。 |
| 调用所有子孙栏目(多级) | {dede:channel type='sun'} |
递归获取所有层级的子栏目。 |
| 调用带样式的子栏目 | {dede:channel type='son' currentstyle='...'} |
用于高亮显示当前所在的子栏目。 |
重要提示:
- 缓存问题:DedeCMS 有强大的缓存机制,当你修改了模板代码后,如果前台页面没有立即生效,请到后台 “系统” -> “一键更新网站” -> “更新栏目HTML” 和 “更新文档HTML”,或者直接清除缓存。
- 栏目类型:
{dede:channel}主要用于调用“栏目”,如果你的子栏目类型是“外部链接”或“单页文档”,它也能被调用,但请注意其行为可能和普通“文章列表”栏目略有不同。 - 命名规范:为了代码清晰和日后维护,建议给
dede:channel循环块起一个别名,{dede:channel type='son' row='8' myname='subnav'},然后在循环体内使用[field:myname:typename/]这样的方式调用,虽然在这个简单例子中不必要,但在复杂模板中是个好习惯。
希望这份详细的指南能帮助您成功地在 DedeCMS 中调用子栏目!
