使用 {dede:field} 标签和 typeid 属性(推荐)
这是最直接、最简单的方法,适用于大多数情况,它通过获取当前栏目的ID,然后找到其顶级栏目的ID,并调用该顶级栏目的链接。

(图片来源网络,侵删)
代码示例:
<a href="{dede:field name='typeid' function='GetTopid(@me)'/}">{dede:field name='typename'/}</a>
代码解析:
{dede:field name='typeid'}: 获取当前栏目的ID。function='GetTopid(@me)': 这是一个PHP函数调用。@me: 代表{dede:field name='typeid'}的值,也就是当前栏目的ID。GetTopid(): 这是 DedeCMS 内置的一个函数,它的作用是根据一个子栏目ID,返回其顶级栏目的ID。
{dede:field name='typename'/}: 获取当前栏目的名称,你也可以把它换成顶级栏目的名称,见下面的“进阶用法”。
进阶用法:获取顶级栏目的名称
如果你想在链接里显示顶级栏目的名称而不是当前栏目名称,可以嵌套使用 {dede:arclist} 标签来查询顶级栏目的信息。

(图片来源网络,侵删)
<a href="{dede:field name='typeid' function='GetTopid(@me)'/}">
{dede:arclist row='1' typeid='[field:typeid function="GetTopid(@me)"/]'}
[field:typename/]
{/dede:arclist}
</a>
代码解析:
[field:typeid function="GetTopid(@me)"/]: 在arclist标签内部,使用[field:xxx]语法来调用函数,获取顶级栏目ID。row='1': 只获取一条记录,因为我们只需要一个顶级栏目的信息。[field:typename/]: 获取这个顶级栏目的名称。
使用 {dede:channel} 标签(适用于导航栏)
如果你的顶级栏目是固定的,并且你想在模板中直接调用它们,可以在当前栏目页使用 typeid 属性来指定顶级栏目ID,然后循环输出。
代码示例:
假设你知道顶级栏目的ID是 1, 2, 3,你可以这样写:

(图片来源网络,侵删)
{dede:channel type='top' typeid='1,2,3'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
代码解析:
type='top': 这个属性表示只调用顶级栏目。typeid='1,2,3': 指定要调用的顶级栏目ID列表,如果你不确定ID,或者想动态获取,这个方法就不太方便了。方法一通常更灵活。
使用自定义函数(最灵活)
如果你有PHP编程基础,或者需要更复杂的逻辑,可以创建一个自定义函数。
步骤:
-
创建自定义函数文件 在
/include/extend.func.php文件中(如果这个文件不存在,就自己创建一个)添加以下PHP函数:/** * 获取当前栏目的顶级栏目链接 * @param int $typeid 当前栏目ID * @return string 顶级栏目的链接 */ function GetTopLink($typeid) { if (empty($typeid)) { return ''; } // 引入全局数据库对象 global $dsql; // 查询顶级栏目信息 // `topid` 是顶级栏目ID,`reid` 是父级栏目ID,顶级栏目的 `reid` 为 0 $query = "SELECT id, typedir FROM `dede_arctype` WHERE id = (SELECT topid FROM `dede_arctype` WHERE id = $typeid)"; $row = $dsql->GetOne($query); if ($row) { // 返回完整的栏目链接 return $row['typedir']; } return ''; } -
在模板中调用 在你的模板文件(如
article_article.htm)中使用这个自定义函数:<a href="{dede:field name='typeid' function='GetTopLink(@me)'/}">返回顶级栏目</a>
代码解析:
- 这个函数
GetTopLink()直接通过SQL查询,根据当前栏目ID找到其顶级栏目的typedir(栏目目录,即链接)。 function='GetTopLink(@me)'将当前栏目ID (@me) 作为参数传递给这个函数。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
方法一 ({dede:field} + GetTopid) |
代码简洁、调用方便、性能好,无需额外文件。 | 稍微嵌套时语法会复杂一点。 | 绝大多数情况下的首选,尤其适用于文章页、列表页调用当前顶级栏目。 |
方法二 ({dede:channel}) |
语法直观,适合循环输出多个顶级栏目。 | 不够灵活,需要手动指定顶级栏目ID。 | 制作固定的主导航栏,且顶级栏目不会变动时。 |
| 方法三 (自定义函数) | 灵活性最高,可以实现任何复杂逻辑,可重用性强。 | 需要修改PHP文件,对新手不友好。 | 当需要获取顶级栏目的其他信息(如特定字段),或逻辑非常复杂时。 |
对于绝大多数用户来说,强烈推荐使用方法一,因为它最简单、最通用,且是 DedeCMS 设计的“标准”用法。
