使用顶级栏目标签(最推荐、最简洁)
如果你的栏目结构是“顶级栏目 -> 二级栏目 -> 文章”,而你只想获取文章所属的“顶级栏目”信息,这是最简单、最稳定的方法。

适用场景: 调用当前文章或内容所在栏目的顶级栏目名称和链接。
调用父栏目名称
使用 解释: 示例(在文章页 输出结果:
如果你需要获取“直接父级”栏目(不一定是顶级),或者需要更复杂的判断,那么使用 适用场景: 获取当前栏目的直接上级栏目的名称和链接。 这个方法需要在列表页或内容页中获取当前栏目的ID,然后通过SQL查询其父级栏目的信息。 在列表页 代码解释: 更健壮的URL处理方式(推荐):
为了避免 这段代码通过 如果你想在模板文件之外的地方(比如一个自定义的PHP插件)获取父栏目信息,可以直接使用PHP代码。 适用场景: 开发者二次开发,在PHP文件中动态获取。 解释: 对于大多数用户来说,强烈推荐使用【方法一】,因为它最简单、最稳定,只有当你明确需要获取“直接父级”而非“顶级”时,才考虑使用【方法二】。{dede:field name='typename'/}
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
{dede:field name='typeurl'/}:会自动获取当前栏目所属的顶级栏目的链接地址。{dede:field name='typename'/}:会自动获取当前栏目所属的顶级栏目的名称。article_article.htm 中):
假设文章位于“新闻”下的“国内新闻”栏目,使用上面的代码,它会直接链接到“新闻”栏目并显示“新闻”。您当前所在的位置:<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
您当前所在的位置:<a href="/news/">新闻</a>
使用SQL查询标签(最灵活、功能最强大)
dede:sql 标签是最佳选择。调用父栏目名称和链接
list_*.htm 或内容页 article_*.htm 中使用:
{dede:sql sql="SELECT * FROM `dede_arctype` WHERE id = ~typeid~"}
<a href="[field:typedir function='str_replace("{cmspath}", "", "@me")'/]">[field:typename/]</a>
{/dede:sql}
{dede:sql sql="..."}:执行自定义SQL查询。SELECT * FROMdede_arctypeWHERE id = ~typeid~:
dede_arctype 是DedeCMS中存储所有栏目的数据表(你的表前缀可能不是dede_,请根据实际情况修改)。~typeid~ 是DedeCMS的一个内置变量,代表当前栏目的ID,SQL标签会自动将其替换为实际的数字ID。[field:typedir function='str_replace("{cmspath}", "", "@me")'/]:
[field:typedir/] 获取从数据库中读取到的栏目完整链接,这个链接通常包含 {cmspath} 这个占位符。function='str_replace("{cmspath}", "", "@me")' 是一个函数处理,它会将 {cmspath} 从链接中移除,得到一个可以直接使用的URL,如果你的后台设置了“不使用目录默认页”,可能需要调整这个函数。[field:typename/]:直接输出查询到的栏目的名称。{cmspath}的问题,可以使用更强大的GetTopType函数。{dede:sql sql="SELECT * FROM `dede_arctype` WHERE id = ~typeid~"}
<a href="[field:id runphp='yes'] $id = @me; $arr = GetOneTypeUrlA($id); @me = $arr['typeurl']; [/field:id]">[field:typename/]</a>
{/dede:sql}
GetOneTypeUrlA 函数来获取绝对正确的栏目链接,兼容性更好。
使用PHP代码(在特定文件中修改)
<?php
// 1. 引入DedeCMS的公共文件
require_once(dirname(__FILE__) . "/include/common.inc.php");
// 2. 假设你有一个栏目ID
$currentTypeId = 5; // 当前栏目ID是5
// 3. 获取当前栏目的信息
$currentType = $dsql->GetOne("SELECT * FROM `#@__arctype` WHERE id = $currentTypeId");
// 4. 从当前栏目信息中获取父级ID
$parentId = $currentType['reid']; // 'reid' 字段存储的是父级栏目的ID
// 5. 如果存在父级栏目 (reid不为0)
if ($parentId > 0) {
// 6. 查询父级栏目的信息
$parentType = $dsql->GetOne("SELECT * FROM `#@__arctype` WHERE id = $parentId");
// 7. 输出父栏目的名称和链接
$parentName = $parentType['typename'];
$parentLink = $parentType['typedir'];
// 处理链接中的{cmspath}
$parentLink = str_replace('{cmspath}', $cfg_cmspath, $parentLink);
echo "父栏目名称: " . $parentName . "<br>";
echo "父栏目链接: " . $parentLink . "<br>";
} else {
echo "该栏目没有父栏目。";
}
?>
require_once(...):引入DedeCMS的核心文件,以使用其数据库连接和全局变量。$dsql->GetOne(...):执行一条SQL查询并返回第一条结果(关联数组)。#@__:这是DedeCMS的数据表前缀占位符,会自动替换为你在后台配置的表前缀(如 dede_)。$currentType['reid']:reid 字段存储的就是当前栏目的直接父级栏目的ID。
总结与对比
方法
优点
缺点
适用场景
顶级栏目标签
代码极简,性能最好,官方推荐
只能获取顶级栏目,无法获取直接父级
调用顶级栏目,导航栏,面包屑的基础部分
SQL查询标签
非常灵活,可获取任意父级,功能强大
代码稍复杂,需要了解SQL和表结构
获取直接父级,或需要进行复杂条件判断时
PHP代码
完全可控,适合复杂逻辑
需要修改PHP文件,不适合模板使用者
二次开发,在PHP脚本中动态获取数据
