使用顶级栏目名称(最推荐)
在DedeCMS的栏目列表页(list_栏目ID.htm)或文章内容页(article_文章ID.htm),系统会自动生成一个名为 topid 的变量,它存储了当前栏目的顶级栏目ID,利用这个ID,我们可以非常方便地获取顶级栏目的所有信息,包括名称。

(图片来源网络,侵删)
适用场景:
- 在栏目列表页 (
list_x.htm) - 页 (
article_x.htm)
代码示例:
在您的模板文件(如 list_article.htm 或 article_article.htm)中,加入以下代码:
{dede:field name='typeid' function="GetTopTypename(@me)"/}
代码解释:

(图片来源网络,侵删)
{dede:field name='typeid'}: 获取当前栏目的ID。function="GetTopTypename(@me)": 这是一个自定义函数调用。@me: 代表typeid的值,即当前栏目ID。GetTopTypename: 这是DedeCMS内置的一个函数,它的作用就是根据一个栏目ID,获取其顶级栏目的名称。
这个方法最简洁、最高效,是官方推荐的做法。
使用SQL直接查询(最灵活)
如果您需要获取的不仅仅是父栏目名称,还有其他信息(如链接、描述等),或者您需要获取的是直接父级而不是顶级栏目,那么直接执行SQL查询是最灵活的方法。
适用场景:
- 需要获取直接父级栏目。
- 需要获取父栏目的多个字段(如名称、链接、ID等)。
- 在非标准页面(如首页、自定义页面)中获取。
代码示例:

(图片来源网络,侵删)
以下代码以获取直接父级栏目为例。
{dede:sql sql="SELECT typename,typedir FROM `dede_arctype` WHERE id = ~typeid~"}
<a href="[field:typedir/]/">[field:typename/]</a>
{/dede:sql}
代码解释:
{dede:sql ...}: DedeCMS的SQL标签,用于执行自定义SQL语句。SELECT typename,typedir FROM dede_arctype WHERE id = ~typeid~:SELECT typename,typedir: 我们想从dede_arctype表(栏目表)中查询栏目的名称(typename)和目录(typedir)。WHERE id = ~typeid~: 查询条件是ID等于当前栏目的ID,这里的~typeid~是DedeCMS的模板标签,在解析时会被替换为实际的栏目ID。
[field:typename/]和[field:typedir/]: 循环输出查询结果中的字段。
如何获取顶级栏目?
如果要用SQL获取顶级栏目,逻辑会稍微复杂一些,需要先找到顶级ID,再查询,在这种情况下,方法一仍然是更优的选择。
通过获取当前栏目信息再递归(适用于PHP文件)
这种方法通常用在PHP模板文件(.php)中,而不是纯粹的HTML模板文件(.htm)中,它通过获取当前栏目的完整信息,然后手动查找其父级。
适用场景:
- 在自定义的PHP页面中。
- 需要进行更复杂的栏目层级逻辑判断。
代码示例:
假设您在一个PHP模板文件中:
<?php
// 引入DedeCMS common.inc.php 文件,确保获取了全局变量
// require_once(dirname(__FILE__) . "/include/common.inc.php");
// 获取当前栏目ID
$typeid = $GLOBALS['typeid'];
// 如果typeid存在
if($typeid > 0) {
// 获取当前栏目的所有信息
$typeInfo = GetOneType($typeid);
// 如果存在父级ID(不为0)
if($typeInfo['reid'] > 0) {
// 获取父级栏目的所有信息
$parentInfo = GetOneType($typeInfo['reid']);
// 现在你可以使用 $parentInfo 中的任何信息
$parentName = $parentInfo['typename'];
$parentLink = $parentInfo['typedir'];
echo "父栏目名称是:" . $parentName;
echo "<a href='".$parentLink."'>返回父栏目</a>";
} else {
echo "当前栏目是顶级栏目,没有父栏目。";
}
}
?>
代码解释:
GetOneType($typeid): DedeCMS的核心函数,根据栏目ID获取该栏目的所有信息,并返回一个关联数组。$typeInfo['reid']:reid字段存储了当前栏目的直接父级栏目ID。reid为 0,则表示它是顶级栏目。GetOneType($typeInfo['reid']): 通过父级ID再次调用函数,获取父级栏目的详细信息。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
GetTopTypename() |
代码最简洁、执行效率最高、官方支持 | 只能获取顶级栏目名称 | 99%的情况下都推荐使用,尤其是在列表页和内容页。 |
{dede:sql} |
非常灵活,可获取任意父级、多个字段 | 代码稍长,直接操作数据库有轻微性能开销 | 需要获取直接父级、或父级多个信息时。 |
| PHP代码 | 逻辑最强大,可进行复杂判断 | 只能在PHP文件中使用,不适合纯HTML模板 | 在自定义PHP页面开发中。 |
对于绝大多数模板修改需求,强烈推荐使用方法一,它既简单又高效。
