织梦系统在解析文章内容页(article_article.htm)或列表页(list_article.htm)时,会先将当前文档的信息(如标题、ID、时间等)存入一个名为 $this 的对象中,我们通过 global $this; 将这个对象引入到当前作用域,然后就可以访问 $this->title 来获取标题了。

下面我将分场景详细介绍如何操作。
页(article_article.htm)中调用标题
这是最简单的情况,因为 $this 对象在内容页中默认就是当前文章的数据。
操作步骤:
- 打开你需要调用标题的模板文件,通常是
/templets/default/article_article.htm。 - 在你想要显示标题的
<title>标签内,使用global $this;来引入全局变量,并调用$this->title。
示例代码:

{dede:include filename="head.html"/}
<head>
<meta charset="utf-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
<!-- ... 其他 meta 标签 ... -->
</head>
<body>
<h1>{dede:field.title/}</h1> <!-- 这是在页面内容区显示标题,不用global -->
<!-- 假设你的 head.html 文件里想用标题 -->
{dede:include filename="head.html"/}
<!-- ... 页面其他内容 ... -->
</body>
</html>
在 head.html 中的写法:
假设你的 head.html 文件位于 /templets/default/head.html,并且你想在里面调用文章标题。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 在这里使用 global $this; 来调用文章标题 -->
{dede:global name='itemname'/} <!-- 这是默认的,通常是栏目名 -->
{dede:global name='typename'/} <!-- 这也是栏目名 -->
<!-- 下面是调用文章标题的正确方法 -->
{dede:global name='title'/} <!-- 这样写是无效的! -->
<!-- 正确的写法 -->
{dede:global name='this'/} <!-- 这样也拿不到 title 属性 -->
<!-- 最推荐、最清晰、最兼容的写法 -->
<title>
{dede:global name='this'/}
</title>
<!-- ... 其他 head 内容 ... -->
</title>
</head>
<body>
上面的写法是错误的! 正确的做法是在 head.html 内部使用PHP代码块。
head.html 的正确写法:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<?php
// 1. 引入全局的 $this 对象
global $this;
// 2. 判断一下,确保是在文章内容页,避免在首页或其他页面报错
if (isset($this->title)) {
// 3. 输出文章标题
echo $this->title;
} else {
// 如果不是文章页(比如是首页),可以显示网站名称
echo $GLOBALS['cfg_webname'];
}
?>
- <?php echo $GLOBALS['cfg_webname']; ?>
</title>
<!-- ... 其他 head 内容 ... -->
</head>
<body>
<!-- ... body 内容 ... -->
</body>
</html>
在 global 变量场景下,最可靠的方式是使用 <?php global $this; echo $this->title; ?>。
在列表页(list_article.htm)中调用栏目标题
在列表页,$this 对象代表的是当前栏目。$this->title 获取到的是,而不是文章标题。
操作步骤:
- 打开列表页模板文件
/templets/default/list_article.htm。 - 在需要显示栏目标题的地方,同样使用
global $this;。
示例代码(在 list_article.htm 中):
{dede:include filename="head.html"/}
<head>
<meta charset="utf-8">
<?php
global $this;
// 在列表页,$this->title 是当前栏目的标题
echo $this->title;
?>
- <?php echo $GLOBALS['cfg_webname']; ?>
</title>
</head>
<body>
<h1>栏目列表:<?php global $this; echo $this->title; ?></h1>
<ul>
{dede:list}
<li>
<a href="[field:arcurl/]"><?php echo $this->title; ?></a> <!-- 错误!这里的 $this 是栏目,不是文章 -->
<!-- 正确调用文章标题的方式 -->
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
</ul>
</body>
</html>
列表页 global 调用要点:
global $this;获取的是当前栏目的信息。$this->title是。- 在
{dede:list}循环内部,$this仍然是栏目的信息,要获取单条文章的标题,必须使用{dede:list}标签内的内置变量,如[field:title/]。
在首页(index.htm)或其他动态页面中调用
在首页、搜索页等非文档型页面,$this 对象是不存在的,直接使用 global $this; 会得到一个 null 值,导致错误。
解决方案:
在这些页面,如果你想显示标题,通常显示的是网站名称,可以直接调用全局配置变量 {$cfg_webname}。
示例代码(在 index.htm 中):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<?php
// 在首页,$this 不存在,直接调用网站名
echo $GLOBALS['cfg_webname'];
?>
</title>
</head>
<body>
<h1><?php echo $GLOBALS['cfg_webname']; ?></h1>
</body>
</html>
最佳实践和总结
为了代码的健壮性和可维护性,推荐遵循以下方法:
- 明确当前页面类型:判断你正在编辑的是文章页、列表页还是首页。
- 页 (
article_article.htm):- 在需要调用文章标题的地方(尤其是
head.html等公共模板中),使用:<?php global $this; echo $this->title; ?>
- 在需要调用文章标题的地方(尤其是
- 列表页 (
list_article.htm):- 在循环外调用,使用:
<?php global $this; echo $this->title; ?>
- 在
{dede:list}循环内调用单条文章标题,使用:[field:title/]
- 在循环外调用,使用:
- 首页/其他页面 (
index.htm等):- 直接调用网站名称,使用:
<?php echo $GLOBALS['cfg_webname']; ?>
或者在模板中直接使用:
{dede:global.cfg_webname/}
- 直接调用网站名称,使用:
特别提醒: 织梦的标签系统 {dede:field.title/} 在其作用域内(如 {dede:field.body/} 之后)可以直接使用,但当你需要在 global 上下文或PHP代码块中访问时,必须通过 $this 对象来获取,理解 $this 的作用域是掌握织梦模板开发的关键。
