使用 GetTopTypename() 函数 (最推荐)
这是DedeCMS官方提供的、最标准、最简洁的方法,它的作用就是获取当前内容所属栏目的顶级栏目名称。

(图片来源网络,侵删)
适用场景: 所有DedeCMS版本,包括GBK和UTF-8编码。
代码示例:
将以下代码直接放在您的内容页模板(通常是 article_article.htm)的任何需要显示顶级栏目名称的位置即可。
{dede:field name='typename'/} <!-- 这是调用当前栏目名称 -->
顶级栏目名称是:{dede:field name='typeid' function='GetTopTypename(@me)'/}
代码解析:

(图片来源网络,侵删)
{dede:field name='typeid'}: 获取当前内容所属栏目的 ID。function='GetTopTypename(@me)': 这是核心部分。@me:代表前面{dede:field}标签获取到的值,也就是当前栏目的ID。GetTopTypename():这是一个DedeCMS内置的PHP函数,它接收一个栏目ID作为参数,并返回该ID对应的顶级栏目的名称。- 整个过程就是:获取当前栏目ID -> 将ID传递给GetTopTypename函数 -> 函数返回顶级栏目名称 -> 显示在页面上。
使用SQL查询 (灵活但稍复杂)
GetTopTypename() 函数在某些特殊情况下无法满足需求(你想获取顶级栏目的其他信息,如链接、简介等),或者你想自定义逻辑,那么可以直接使用SQL查询。
适用场景: 需要获取顶级栏目更多信息,或对 GetTopTypename() 的结果进行二次处理。
代码示例:
页模板中使用 {dede:sql} 标签进行查询。
{dede:sql sql="SELECT typename FROM `dede_arctype` WHERE id=(SELECT topid FROM `dede_arctype` WHERE id=~typeid~)"}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:sql}
代码解析:

(图片来源网络,侵删)
-
内层查询:
SELECT topid FROM dede_arctype WHERE id=~typeid~~typeid~:这是DedeCMS模板中的特殊变量,等同于{dede:field.name='typeid'/},表示当前栏目的ID。- 这个查询的作用是:根据当前栏目的ID,去
dede_arctype(栏目表) 中找到它的topid字段值。topid字段存储的就是该栏目的 顶级栏目ID。
-
外层查询:
SELECT typename FROM dede_arctype WHERE id=(...)WHERE id=(...):这里的 就是内层查询得到的结果,也就是顶级栏目的ID。- 这个查询的作用是:根据上一步得到的顶级栏目ID,去
dede_arctype表中查询该顶级栏目的typename(名称)。
-
输出结果:
[field:typename/]:输出查询到的顶级栏目名称。[field:typelink/]:输出顶级栏目的链接,这是一个非常有用的附加信息。
使用PHP代码 (最灵活,适合高级用户)
如果你对PHP比较熟悉,并且想在模板中实现更复杂的逻辑,可以直接嵌入PHP代码。
适用场景: 需要在顶级栏目名称的基础上进行复杂的判断或循环。
代码示例:
在模板文件中,你需要将这段代码放在 {dede:php} 和 {/dede:php} 标签之间。
{dede:php}
// 1. 获取当前栏目的ID
$currentTypeId = $this->Fields['typeid'];
// 2. 引入栏目类文件
require_once(DEDEINC.'/typelink.class.php');
// 3. 创建栏目对象
$typeLink = new TypeLink($currentTypeId);
// 4. 获取顶级栏目信息
$topType = $typeLink->GetTopType();
// 5. 输出顶级栏目名称
echo $topType['typename'];
// 如果需要链接,可以这样输出
// echo $topType['typeurl'];
{/dede:php}
代码解析:
$this->Fields['typeid']:在{dede:php}标签内,可以通过$this->Fields数组访问到当前内容页的所有字段,其中就包括typeid。require_once(DEDEINC.'/typelink.class.php'):引入DedeCMS的栏目处理类TypeLink,这个类封装了所有与栏目相关的操作。new TypeLink($currentTypeId):实例化这个类,并将当前栏目ID作为参数传入。$typeLink->GetTopType():调用TypeLink对象的GetTopType()方法,它会返回一个包含顶级栏目所有信息的数组(如typename,typedir,id等)。echo $topType['typename']:直接输出数组中的typename键对应的值,即顶级栏目名称。
总结与对比
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
GetTopTypename() |
代码最简洁,官方标准用法,效率高 | 功能相对单一,只能获取名称 | ★★★★★ (首选) |
| SQL查询 | 非常灵活,可以获取顶级栏目的任何信息(名称、链接、ID等) | 代码稍长,可读性稍差,对SQL不熟的用户可能不易理解 | ★★★★☆ (备选) |
| PHP代码 | 功能最强大,可以实现任何自定义逻辑 | 需要PHP基础,代码量最大,模板文件中嵌入PHP可能不够优雅 | ★★★☆☆ (高级用户) |
对于绝大多数用户来说,直接使用方法一 GetTopTypename() 是最佳选择,它简单、高效且官方支持。
