使用顶级栏目循环标签(最常用、最推荐)
这是 DedeCMS 系统原生提供的最标准、最安全的方法,它会自动获取所有顶级栏目,并循环输出。

(图片来源网络,侵删)
标签代码:
{dede:channel type='top' row='10'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
参数详解:
{dede:channel}:这是调用栏目的核心标签。type='top':这是最关键的参数,它指定了只调用顶级栏目。row='10':表示要调用的栏目数量,'10'是示例,你可以改成你想要的数字,row='20',如果省略此参数,默认会调用所有顶级栏目。[field:typelink/]:栏目链接,这是系统字段,会自动生成栏目的完整URL。[field:typename/]:栏目名称。
示例:制作一个主导航菜单
假设你想做一个网站顶部的主导航,包含所有顶级栏目。
<div class="main-nav">
<ul>
{dede:channel type='top' row='8'}
<li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
{dede:channel}
</ul>
</div>
使用SQL直接查询(更灵活,适合特定场景)
如果你需要更复杂的查询,或者想在特定条件下获取顶级栏目,可以使用SQL标签。
标签代码:
{dede:sql sql='SELECT * FROM dede_arctype WHERE reid=0 ORDER BY sortrank ASC'}
<a href="[field:typedir function='MakeOneDir(@me)'/]">[field:typename/]</a>
{/dede:sql}
参数详解:
{dede:sql}:执行自定义SQL查询的标签。sql='...':SQL查询语句。SELECT * FROM dede_arctype:从dede_arctype这张栏目表里查询所有字段。WHERE reid=0:这是关键条件,reid字段存储的是栏目的父栏目ID,reid=0就表示没有父栏目,即顶级栏目。ORDER BY sortrank ASC:按栏目排序字段sortrank进行升序排列,确保栏目顺序正确。
[field:typedir function='MakeOneDir(@me)'/]:typedir是栏目目录字段,但它可能包含{cmspath}这样的变量。function='MakeOneDir(@me)'是一个函数,用于将typedir解析成完整的、可访问的URL,这个功能和方法一中的typelink是等效的。[field:typename/]:栏目名称,和方法一中一样。
在列表页或内容页获取当前栏目的顶级栏目链接
你可能不在首页,而是在某个子栏目页或文章页,想获取当前栏目所属的顶级栏目的链接。
标签代码:
{dede:gettopname}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:gettopname}
参数详解:
{dede:gettopname}:这是一个专门用于获取当前栏目“顶级父栏目”信息的标签。- 它会自动判断当前栏目的层级,并找到最顶级的那个栏目。
[field:typelink/]和[field:typename/]:分别输出顶级栏目的链接和名称。
示例应用: 在你的面包屑导航中,你可能想显示“首页 > 顶级栏目 > 当前栏目”,使用这个标签可以轻松获取“顶级栏目”部分。

(图片来源网络,侵删)
<div class="breadcrumb">
<a href="/">首页</a> >
{dede:gettopname}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:gettopname}
>
<a href="{dede:field name='typelink'/}">{dede:field name='typename'/}</a>
</div>
总结与对比
| 方法 | 标签代码 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 顶级栏目循环 | {dede:channel type='top'} |
最标准、最安全、最简单,系统原生支持,无需关心表结构。 | 灵活性稍差,只能进行简单的循环。 | 绝大多数场景,如主导航、页脚链接等。 |
| SQL查询 | {dede:sql sql='...'} |
非常灵活,可以添加各种复杂条件(如按时间、按ID范围等)。 | 需要了解数据库表结构,有一定风险(SQL注入,需注意过滤)。 | 需要特殊筛选或排序的顶级栏目列表。 |
| 获取当前顶级栏目 | {dede:gettopname} |
智能、便捷,能自动定位到当前栏目的顶级父栏目。 | 只能在列表页或内容页使用,作用域有限。 | 面包屑导航、当前位置显示等。 |
重要提示
- 表前缀:如果你的
dede_arctype表有自定义的前缀(cms_arctype),请务必在SQL查询中修改表名。 - 缓存:DedeCMS有强大的缓存机制,修改了模板文件后,如果前台页面没有更新,请到后台的“系统 -> 站点缓存管理”中手动更新一下缓存。
- 安全性:在使用方法二(SQL查询)时,如果变量来自用户输入(如URL参数),请务必做好过滤,以防SQL注入攻击。
对于99%的需求,方法一都是你的首选,它简单、高效且安全。

(图片来源网络,侵删)
