织梦field global中调用标题怎么实现?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

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

织梦field global中调用标题
(图片来源网络,侵删)

下面我将分场景详细介绍如何操作。


页(article_article.htm)中调用标题

这是最简单的情况,因为 $this 对象在内容页中默认就是当前文章的数据。

操作步骤:

  1. 打开你需要调用标题的模板文件,通常是 /templets/default/article_article.htm
  2. 在你想要显示标题的 <title> 标签内,使用 global $this; 来引入全局变量,并调用 $this->title

示例代码:

织梦field global中调用标题
(图片来源网络,侵删)
{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 的正确写法:

织梦field global中调用标题
(图片来源网络,侵删)
<!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 获取到的是,而不是文章标题。

操作步骤:

  1. 打开列表页模板文件 /templets/default/list_article.htm
  2. 在需要显示栏目标题的地方,同样使用 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>

最佳实践和总结

为了代码的健壮性和可维护性,推荐遵循以下方法:

  1. 明确当前页面类型:判断你正在编辑的是文章页、列表页还是首页。
  2. 页 (article_article.htm)
    • 在需要调用文章标题的地方(尤其是 head.html 等公共模板中),使用:
      <?php global $this; echo $this->title; ?>
  3. 列表页 (list_article.htm)
    • 在循环外调用,使用:
      <?php global $this; echo $this->title; ?>
    • {dede:list} 循环内调用单条文章标题,使用:
      [field:title/]
  4. 首页/其他页面 (index.htm 等)
    • 直接调用网站名称,使用:
      <?php echo $GLOBALS['cfg_webname']; ?>

      或者在模板中直接使用:

      {dede:global.cfg_webname/}

特别提醒: 织梦的标签系统 {dede:field.title/} 在其作用域内(如 {dede:field.body/} 之后)可以直接使用,但当你需要在 global 上下文或PHP代码块中访问时,必须通过 $this 对象来获取,理解 $this 的作用域是掌握织梦模板开发的关键。

-- 展开阅读全文 --
头像
C语言bool类型在1003题中如何正确使用?
« 上一篇 2025-12-03
Linux环境C语言程序设计视频教程怎么学?
下一篇 » 2025-12-03

相关文章

取消
微信二维码
支付宝二维码

目录[+]