使用 GetTopTypename() 获取顶级栏目名(最推荐)
这是最常用、最稳定的方法,无论当前栏目是顶级栏目还是二级、三级栏目,它都能正确获取到顶级父栏目的名称。

(图片来源网络,侵删)
适用场景:
- 在列表页 (
list_article.htm) 或内容页 (article_article.htm) 的页眉、页脚等公共位置,需要显示网站的顶级栏目名称(在文章详情页显示“新闻中心”)。 - 当你不确定当前栏目层级,但又想获取到最顶级的栏目时。
代码示例:
{dede:field name='typename' function='GetTopTypename(@me)'/}
代码解析:
{dede:field name='typename'}:这是获取当前栏目名称的基本标签。function='GetTopTypename(@me)':这是一个函数调用。@me:代表{dede:field name='typename'}这个标签本身获取到的值(即当前栏目的名称)。GetTopTypename():这是 DedeCMS 内置的一个核心函数,它的作用是传入一个栏目ID或名称,然后返回这个栏目的顶级父栏目的名称。- 因为
typename本身就是名称,所以直接传给它,GetTopTypename会智能地处理并找到其顶级栏目。
直接获取当前栏目名称
如果你只需要获取当前栏目本身的名称(而不是顶级栏目),这个方法最直接。
适用场景:
- 在当前栏目的列表页 (
list_article.htm) 中,显示当前栏目的标题。 - 在面包屑导航中显示当前层级的栏目名。
代码示例:
{dede:field name='typename'/}
或者使用全局变量 $typename(在某些模板引擎下更直接):
<?php echo $typename; ?>
代码解析:
{dede:field name='typename'}:这是 DedeCMS 的标准字段调用标签,用于获取当前栏目的名称。$typename:这是在模板解析过程中,DedeCMS 自动创建的一个 PHP 变量,它同样保存了当前栏目的名称,直接在 PHP 代码块中输出即可。
通过栏目ID获取栏目名称(更灵活)
如果你有栏目的ID,并且想通过ID来获取它的名称(或者其他信息),这个方法非常灵活。
适用场景:
- 在循环嵌套中,需要根据子栏目的ID来获取其父栏目的名称。
- 在自定义SQL查询后,需要根据得到的ID来获取栏目信息。
代码示例:
{dede:geturl typeid='栏目ID' function='GetTopTypeme(@me)'/}
注意: 上面的写法有点混淆,更标准的用法是结合 GetTypeid 函数。
更清晰的示例(获取当前栏目的顶级栏目ID,再用它获取名称):
{dede:field name='typeid' function='GetTopTypename(@me)'/}
代码解析:
{dede:field name='typeid'}:获取当前栏目的 ID。function='GetTopTypename(@me)':将这个 ID 传递给GetTopTypename函数,函数内部会根据ID找到对应的顶级栏目,并返回其名称,这个方法和方法一的效果是一样的,只是传递的参数从名称换成了ID。
使用 $this->TypeLink 对象(底层方法)
这种方法更底层,直接从 PHP 对象中获取数据,非常强大,但可读性稍差。
适用场景:
- 需要获取当前栏目的多种信息,如ID、名称、链接、描述等。
- 在复杂的PHP逻辑判断中。
代码示例:
<?php // 获取当前栏目名称 $typename = $this->TypeLink->Type['typename']; // 获取当前栏目ID $typeid = $this->TypeLink->Type['id']; // 获取当前栏目链接 $typeurl = $this->TypeLink->Type['typedir']; // 获取顶级栏目名称 $topType = $this->TypeLink->GetTopTypeLink(); $topTypename = $topType['typename']; echo "当前栏目名: " . $typename; echo "<br>"; echo "顶级栏目名: " . $topTypename; ?>
总结与对比
| 方法 | 标签/代码 | 适用场景 | 优点 | 缺点 | |
|---|---|---|---|---|---|
| 方法一 | {dede:field name='typename' function='GetTopTypename(@me)'/} |
顶级栏目名称 | 通用,页眉页脚,需要顶级栏目名时 | 最推荐,稳定,不受层级影响 | 只能获取顶级名称 |
| 方法二 | {dede:field name='typename'/} |
当前栏目名称 | ,面包屑 | 简单直接,性能最好 | 只能获取当前名称 |
| 方法三 | {dede:field name='typeid' function='GetTopTypename(@me)'/} |
顶级栏目名称 | 通过ID获取栏目信息 | 灵活,可与其他函数结合 | 和方法一效果相似,略显冗余 |
| 方法四 | $this->TypeLink->Type['typename'] |
当前/顶级等多种信息 | 复杂逻辑,需要多字段信息 | 功能强大,灵活 | 可读性差,需要懂PHP |
最佳实践建议
- 如果你想在网站的公共头部或底部显示一个固定的顶级栏目名称(产品中心”),请使用方法一。 这是最稳妥的方式。
- 如果你想在文章列表页显示“本栏目:XXX”,请使用方法二。
- 在绝大多数情况下,方法一和方法二已经能满足 99% 的需求。
希望这些方法能帮助您!
