下面我将为您详细介绍最常用和最有效的方法。

(图片来源网络,侵删)
使用全局变量 {dede:field name='typename'/} (最推荐)
这是最直接、最常用的方法,适用于绝大多数情况,尤其是在文章页、列表页等需要显示当前栏目名称的地方。
使用场景:
- 页 (
article_article.htm) - 栏目列表页 (
list_category.htm) - 自定义页面/单页 (
article_article.htm等模板文件)
代码示例:
<h1>您当前所在的位置是:<strong>{dede:field name='typename'/}</strong></h1>
代码解析:

(图片来源网络,侵删)
{dede:field}是 DedeCMS 的一个字段调用标签。name='typename'指定了要获取的字段名称是typename,这个变量在系统运行时会被自动赋值为当前栏目的名称。
使用 SQL 查询 {dede:sql} (灵活但稍复杂)
当您需要在一个复杂的循环(如 {dede:arclist})中调用栏目名称,或者需要进行一些额外判断时,可以使用 sql 标签直接查询数据库。
使用场景:
- 在文章列表中,每篇文章后面都加上它所属的栏目名称。
- 需要对栏目名称进行二次处理或判断。
代码示例:
假设在文章列表页 (list_category.htm),你想在文章标题后显示栏目名。
{dede:arclist titlelen='40' row='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>栏目:[field:typename/]</span>
</li>
{/dede:arclist}
代码解析:

(图片来源网络,侵删)
- 在
{dede:arclist}循环标签中,系统会自动为当前循环项(即当前文章)加载相关的栏目信息。 [field:typename/]是{dede:field name='typename'/}的简写形式,专门用于{dede:arclist}、{dede:loop}等循环标签内部,用于获取当前项的栏目名称。
在 PHP 代码中直接调用 (适用于开发者)
如果您在模板文件中需要使用 PHP 逻辑,并且想在 PHP 代码块里获取栏目名称,可以直接调用 DedeCMS 的全局对象 $this。
使用场景:
- 在自定义的 PHP 函数或复杂的逻辑判断中。
- 需要将栏目名称赋值给一个 PHP 变量。
代码示例: 在模板文件中,您可以这样写:
<?php
// 获取当前栏目名称并赋值给一个PHP变量
$current_category_name = $this->Fields['typename'];
// 现在可以在PHP代码中使用这个变量了
if ($current_category_name == "公司新闻") {
echo "<p>欢迎来到公司新闻频道!</p>";
}
?>
<h2>当前栏目:<?php echo $current_category_name; ?></h2>
代码解析:
$this在 DedeCMS 模板中指向当前页面对象。$this->Fields是一个包含当前页面所有字段信息的数组。$this->Fields['typename']就直接对应了当前栏目的名称。
总结与对比
| 方法 | 代码示例 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 全局变量 | {dede:field name='typename'/} |
最简单、最直接,代码清晰 | 灵活性相对较低 | 绝大多数情况,如页面标题、面包屑导航等 |
| SQL查询 | [field:typename/] |
非常灵活,可在循环内使用 | 依赖循环标签,不循环则无效 | 在 {dede:arclist} 等列表中显示栏目名 |
| PHP调用 | $this->Fields['typename'] |
功能最强大,可进行复杂逻辑 | 需要一定的 PHP 基础 | 在模板中嵌入 PHP 代码进行复杂判断时 |
常见问题:为什么我的调用不显示?
- 模板缓存问题:这是最常见的原因,修改模板后,请务必登录 DedeCMS 后台,点击 “系统” -> “一键更新网站”,然后选择 “更新HTML” 和 “更新缓存”,再刷新前台页面。
- 标签拼写错误:请仔细检查标签名称,
typename不要拼错成typeame或typename/后面多加了一个斜杠。 - 错误的位置:确保您将标签放在了正确的模板文件中,不要在首页模板 (
index.htm) 中尝试调用某个特定栏目的名称,除非通过其他方式(如dede:channel})指定。
对于绝大多数用户来说,直接使用 {dede:field name='typename'/} 就能完美解决问题。
