使用 {dede:field.typeid/} 和顶级栏目缓存(最推荐)
这是最常用、最稳定且效率最高的方法,尤其是在列表页和内容页,它利用了 DedeCMS 自带的栏目缓存,直接从缓存中获取顶级栏目信息,避免了额外的数据库查询。

(图片来源网络,侵删)
适用场景:
- 列表页 (
list_*.php) - 内容页 (
article_*.php)
代码示例:
{dede:field name='typeid' function="GetTopTypename(@me)" /}
代码解析:
{dede:field name='typeid' /}:这是获取当前栏目或文章本身的ID,如果当前栏目ID是 5,这个标签会输出5。function="GetTopTypename(@me)":这是核心部分,它调用了 DedeCMS 的一个内置函数GetTopTypename。function="...":表示调用一个自定义函数。GetTopTypename:这是 DedeCMS 系统中专门用来“根据当前栏目ID获取其顶级栏目名称”的函数。@me:是 DedeCMS 模板引擎中的一个特殊变量,代表前面标签处理后的值。@me就是当前栏目的ID(5)。
工作流程:

(图片来源网络,侵删)
{dede:field.name='typeid' /}先获取到当前栏目的ID(5)。@me将这个ID(5)传递给GetTopTypename函数。GetTopTypename(5)函数执行,查询数据库或缓存,找到ID为5的栏目的顶级栏目名称。- 最终输出顶级栏目的名称。
在顶级栏目页直接调用(仅在顶级栏目页有效)
如果你的页面本身就是顶级栏目页,那么调用顶级栏目名称就等同于调用当前栏目名称,这种情况非常简单。
适用场景:
- 顶级栏目列表页
代码示例:
{dede:field.typename /}
或者
{dede:global name='typename'/}
代码解析:
{dede:field.typename /}:直接调用当前栏目的名称。{dede:global.name='typename'/}:通过全局变量typename来获取,效果与上面相同。
⚠️ 重要提示:
这种方法只在当前页面是顶级栏目时才有效,如果在子栏目列表页使用 {dede:field.typename /},它会输出子栏目自己的名称,而不是顶级栏目的名称。
使用 channel 标签和 reid 属性(适用于循环或特定判断)
这种方法比较灵活,可以用来循环输出顶级栏目,或者在已知顶级栏目ID时获取其名称。
适用场景:
- 在首页调用所有顶级栏目。
- 在已知顶级栏目ID时,获取其名称。
循环输出所有顶级栏目(常用在首页):
{dede:channel type='top' row='8'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解析:
{dede:channel type='top' ...}:channel标签用于调用栏目列表。type='top':关键参数,表示只调用顶级栏目。row='8':表示调用8个顶级栏目。[field:typelink/]:输出栏目的链接地址。[field:typename/]:输出栏目的名称。
获取指定顶级栏目的名称(不常用,但也是一种思路):
如果你知道某个顶级栏目的ID,可以通过 channel 标签的 typeid 属性来获取它。
{dede:channel typeid='1' row='1'}
当前顶级栏目名称是:[field:typename/]
{/dede:channel}
这段代码会获取ID为 1 的顶级栏目名称,这种方法不如方法一灵活,因为它是硬编码ID。
总结与推荐
| 方法 | 代码 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| 方法一 (推荐) | {dede:field.typeid function="GetTopTypename(@me)"/} |
列表页、内容页(通用性强) | 效率高(利用缓存)、代码简洁、逻辑清晰 | 无明显缺点 |
| 方法二 | {dede:field.typename/} |
仅在顶级栏目页 | 极其简单 | 仅适用于顶级栏目页,在子栏目页会出错 |
| 方法三 | {dede:channel type='top'}...{/dede:channel} |
首页循环调用所有顶级栏目 | 灵活,适合循环 | 对于获取单个页面的顶级栏目名称,不如方法一直接 |
最终建议:
- 在列表页(list*.php)和内容页(article*.php)中,请务必使用方法一。 这是 DedeCMS 的标准做法,也是最稳定、最高效的方式。
- 在首页或其他需要循环显示所有顶级栏目的地方,使用方法三。
- 只在确定当前页面就是顶级栏目页时,才使用方法二。
