使用 typeid 和 topid 属性(最推荐,最常用)
这是最直接、最简单的方法,适用于绝大多数情况,你只需要在标签中指定当前栏目的ID(typeid),并告诉Dede你要获取它的顶级父栏目(topid='1')。

(图片来源网络,侵删)
场景:在当前栏目页(如 /category/5/页,调用其顶级父栏目的名称。
标签代码:
{dede:type typeid='5' topid='1'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
代码解析:
{dede:type}:这是调用栏目信息的标签。typeid='5':这是关键,你需要填写当前栏目的ID,如果你在ID为5的栏目页,这里就写5,如果你在内容页,通常可以用typeid变量,即typeid='{typeid}'。topid='1':这是另一个关键,这个属性告诉Dede,不要获取ID为5的栏目本身,而是要获取它的顶级父栏目。'1'在这里是占位符,表示“顶级”,而不是ID为1的栏目,所以无论它有多少级父栏目,都能找到最顶层的那个。[field:typelink/]:获取该栏目的链接地址。[field:typename/]:获取该栏目的名称。
示例(在栏目页模板 list_article.htm 中):
假设当前栏目是“科技”下的“手机”,层级是“首页 > 科技 > 手机”,你想在“手机”栏目页显示“科技”作为父栏目。
<h1>当前栏目:{dede:field name='typename'/}</h1>
<p>父栏目是:
{dede:type typeid='{typeid}'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
</p>
这里的 typeid='{typeid}' 会自动获取当前页面的栏目ID。
使用 GetTopTypename 自定义函数(灵活,需修改文件)
如果你不想在模板里写 typeid,或者想创建一个更简洁的标签来直接获取顶级栏目名,可以通过修改 include/common.func.php 文件来实现一个自定义函数。
步骤:
-
打开文件:用FTP或文件管理器打开
/include/common.func.php文件。 -
添加函数:在文件末尾
?>之前,添加以下代码:/** * 获取指定栏目的顶级栏目名称 * @param int $typeid 当前栏目ID * @return string 顶级栏目名称 */ function GetTopTypename($typeid) { if (empty($typeid)) { return ''; } // 获取当前栏目信息 $row = $GLOBALS['dsql']->GetOne("SELECT * FROM `#@__arctype` WHERE id = '$typeid'"); if (empty($row)) { return ''; } // 如果顶级栏目ID为0,说明它本身就是顶级栏目 if ($row['topid'] == 0) { return $row['typename']; } // 否则,递归查找顶级栏目 $topid = $row['topid']; $topRow = $GLOBALS['dsql']->GetOne("SELECT typename FROM `#@__arctype` WHERE id = '$topid'"); return $topRow['typename']; } -
保存文件。
使用方法:
现在你可以在任何模板文件中直接调用这个函数了。
<h2>顶级父栏目是:{dede:GetTopTypename typeid='{typeid}'}</h2>
优点:
- 代码更简洁,语义更清晰。
- 不需要每次都写
{dede:type}标签对。
缺点:
- 需要修改核心文件,升级DedeCMS时可能需要重新修改。
页调用父栏目名称
页(article_article.htm)中调用父栏目名称也很常见,逻辑和方法一类似,只是获取当前栏目ID的方式不同。
场景:在文章详情页,显示这篇文章所属栏目的父栏目名称。
标签代码:
{dede:type typeid='{typeid}' topid='1'}
<span>栏目分类:<a href="[field:typelink/]">[field:typename/]</a></span>
{/dede:type}
代码解析:页中,{typeid} 这个全局变量会自动获取当前文章所属栏目的ID。
typeid='{typeid}'会正确地指向文章的栏目。topid='1'同样会获取这个栏目的顶级父栏目。
调用直接父栏目名称(非顶级)
如果你不想获取顶级父栏目,而是想获取它的直接上级栏目名称,可以省略 topid 属性。
场景:栏目层级为“首页 > 科技 > 手机”,在“手机”栏目页,想获取“科技”作为父栏目。
标签代码:
{dede:type typeid='5'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
代码解析:
- 当
{dede:type}标签没有topid属性时,它默认返回的就是typeid所指定栏目的直接父栏目信息。 - 如果ID为5的栏目已经是顶级栏目(
topid=0),那么这个标签会返回它自身的信息。
总结与选择
| 场景 | 推荐方法 | 代码示例 |
|---|---|---|
| 在栏目页/内容页获取顶级父栏目 | 方法一 | {dede:type typeid='{typeid}' topid='1'}[field:typename]{/dede:type} |
| 想创建一个更简洁的标签,多处复用 | 方法二 | 修改common.func.php后使用 {dede:GetTopTypename typeid='{typeid}'} |
| 在栏目页获取直接父栏目 | 方法四 | {dede:type typeid='{typeid}'}[field:typename]{/dede:type} |
对于大多数用户来说,方法一 是最通用、最安全、最推荐的方式,它不修改任何核心文件,仅通过模板标签就能实现需求,兼容性最好。
