核心标签:{dede:channel}
{dede:channel} 是专门用来调用栏目(频道)列表的标签,是制作主导航、侧边栏导航、子栏目导航等的首选。

基本语法
{dede:channel type='top' row='8'}
<a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:channel}
核心属性解析
-
type(最重要): 指定调用的栏目类型。top(默认值): 调用顶级栏目,这是制作网站主导航最常用的属性。son: 调用当前栏目的子栏目,通常用于在文章列表页或内容页显示其下的子栏目。self: 调用包括当前栏目及其子栏目的所有栏目。sun: 调用指定栏目的子栏目,需要配合typeid属性使用。global: 调用全局栏目,即所有层级的栏目。
-
typeid: 指定调用的栏目ID。- 当
type='son'或type='sun'时,typeid是必须的,用来指定父栏目的ID。 - 在其他情况下,可以留空。
- 当
-
row: 调用栏目的数量。row='8'表示调用8个栏目。
-
currentstyle: (非常实用) 为当前栏目所在的链接设置一个特殊的样式。
(图片来源网络,侵删)- 这个属性可以让你轻松实现“高亮当前导航项”的效果。
- 语法:
currentstyle='<li class="active"><a href="~typelink~">~typename~</a></li>' ~typelink~会被替换为[field:typeurl/]~typename~会被替换为[field:typename/]
-
typeid: 指定栏目ID,通常与type='son'配合使用。
{dede:channel} 的常用字段(用[field:xxx/]调用)
[field:typename/]: 栏目名称。[field:typeurl/]: 栏目链接地址。[field:id/]: 栏目ID。[field:seotitle/]: 栏目SEO标题。[field:typenamess/]: 栏目简略名称。
常用导航调用场景与示例
场景1:网站主导航(调用顶级栏目)
这是最常见的用法,通常在网站的头部 header.htm 模板文件中使用。
示例代码:
<ul class="nav-main">
{dede:channel type='top' row='8' currentstyle="<li class='active'><a href='~typelink~'>~typename~</a></li>"}
<li><a href='[field:typeurl/]'>[field:typename/]</a></li>
{/dede:channel}
</ul>
效果解释:

type='top'确保只调用顶级栏目。row='8'限制显示8个栏目。currentstyle实现了魔法效果:当用户访问某个栏目时,该栏目对应的<li>会自动加上class="active"属性,方便你用CSS来高亮显示(例如改变背景色或文字颜色)。
场景2:当前栏目的子栏目导航
常用于文章列表页(list_article.htm页(article_article.htm),显示当前栏目下的所有子栏目。
示例代码(在列表页模板中):
<div class="subnav">
<h3>子栏目导航</h3>
<ul>
{dede:channel type='son' typeid=''}
<li><a href="[field:typeurl/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</div>
效果解释:
type='son'表示调用子栏目。typeid=''这里留空,DedeCMS会自动获取当前页面的栏目ID作为父ID,非常智能。
场景3:面包屑导航(当前位置)
面包屑导航通常显示为“首页 > 栏目A > 栏目B > 当前页面”,DedeCMS有专门的面包屑标签。
示例代码:
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a>
{dede:field name='position'/}
</div>
效果解释:
{dede:global.cfg_cmsurl/}调用网站根目录URL。{dede:field name='position'/}是DedeCMS的内置字段,它会自动根据当前页面的层级生成类似> <a href='栏目A链接'>栏目A</a> > <a href='栏目B链接'>栏目B</a>这样的HTML代码。
场景4:带栏目图片的导航
如果栏目设置了“栏目图片”,可以这样调用。
示例代码:
{dede:channel type='top' row='6'}
<a href="[field:typeurl/]">
<img src="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]/images/logo.jpg" alt="[field:typename/]">
<span>[field:typename/]</span>
</a>
{/dede:channel}
注意: [field:typedir/] 是栏目的目录路径,你需要根据实际情况拼接出图片的完整路径,上面的 str_replace 是为了移除路径中的 {cmspath} 变量,使其成为相对路径,更稳妥的方式是在后台栏目管理中直接填写完整的图片URL。
场景5:调用指定栏目的同级栏目
你想在“产品中心”栏目页,显示“产品中心”的所有兄弟栏目(即同级的其他栏目)。
示例代码:
思路是先获取当前栏目的父栏目ID,然后调用该父栏目的子栏目。
{dede:channel type='son' typeid=''}
{dede:global name='typeid' runphp='yes'}
$dsql = new DedeSql(false);
$reid = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id=@me");
@me = $reid['reid'];
{/dede:global}
<ul>
{dede:channel type='son' typeid='[field:global name='typeid'/]'}
<li><a href="[field:typeurl/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
{/dede:channel}
解释:
- 内层的
{dede:global name='typeid' runphp='yes'}是一段PHP代码,它获取当前栏目的ID,然后查询数据库找到其父栏目的ID(reid),并将这个父ID赋值给全局变量。 - 外层的
{dede:channel type='son' typeid='...'}使用这个获取到的父ID来调用其所有子栏目,也就是同级栏目。
补充:使用 {dede:arclist} 调用单页或外部链接
有些栏目可能不是文章列表,而是“单页内容”或“外部链接”。 示例:调用指定ID的单页内容 假设你有一个ID为1的单页栏目“关于我们”,想在首页显示其内容。 希望这份详细的指南能帮助你完全掌握DedeCMS的导航标签调用!如果还有更具体的需求,可以随时提出。{dede:channel} 也能调用它们,但如果你想调用单页的内容,则需要使用 {dede:arclist}
<h2>关于我们</h2>
{dede:arclist typeid='1' row='1'}
[field:content/]
{/dede:arclist}
typeid='1' 指定栏目ID。row='1' 只调用一篇文章(单页也只有一篇文章)。[field:content/] 调用文章的内容。
总结与最佳实践
{dede:channel type='top' currentstyle='...'}。{dede:channel type='son'},在列表页和内容页中无需指定 typeid。{dede:field name='position'/}。currentstyle 属性,这是实现导航交互体验的关键。typeid 和 type 的组合使用,可以调用出任何你想要的栏目结构。{dede:arclist}。
