dede栏目分页标题如何自定义?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 DEDE建站 正文

默认情况下,DedeCMS 的栏目分页标题通常是“栏目名 - 第N页”,这显然不够优化,我们可以通过修改模板文件和核心函数来实现更智能、更友好的标题。

dede 栏目分页标题
(图片来源网络,侵删)

核心思路

要修改栏目分页标题,主要有两种方法:

  1. 修改模板文件 (推荐,灵活且安全):通过修改 list_article.htm 模板文件,使用 DedeCMS 的内置标签和 PHP 代码来动态生成标题,这是最常用也是最安全的方法。
  2. 修改核心函数 (不推荐,风险高):直接修改 /include/arc.listview.class.php 这个核心文件,这种方法功能最强大,但升级 DedeCMS 时会被覆盖,且修改不当可能导致网站出错。

修改模板文件 list_article.htm (推荐)

这是最主流的方法,我们通过在模板文件中添加判断逻辑来实现。

找到并打开模板文件

登录你的 DedeCMS 后台,进入 模板 -> 默认模板管理,找到你当前栏目正在使用的列表模板,通常是 list_article.htm,点击后面的“修改”按钮,进入编辑界面。

标签

list_article.htm 文件中,找到 <title> 标签,它通常在文件的头部,类似这样:

dede 栏目分页标题
(图片来源网络,侵删)

编写新的标题逻辑

我们将用 {dede:php} 标签来编写 PHP 代码,判断当前是否为第一页,并生成不同的标题。

将原有的 <title> 标签替换为以下代码:

    {dede:php}
        // 获取当前页码
        $page = $this->PageNo;
        // 获取栏目名称
        $title = $this->Fields['title'];
        // 获取网站名称
        $webname = $GLOBALS['cfg_webname'];
        // 判断是否为第一页
        if ($page == 1) {
            // 如果是第一页,只显示栏目名和网站名
            echo $title . ' - ' . $webname;
        } else {
            // 如果不是第一页,显示“栏目名 - 第N页 - 网站名”
            echo $title . ' - 第' . $page . '页 - ' . $webname;
        }
    {/dede:php}

代码解释

  • $this->PageNo: 这是 DedeCMS 在列表模板中内置的变量,代表当前的页码,第一页时,它的值是 1
  • $this->Fields['title']: 获取当前栏目的名称。
  • $GLOBALS['cfg_webname']: 获取你在后台设置的网站名称。
  • if ($page == 1): 判断逻辑,如果当前是第一页,我们就不显示“第1页”,因为首页标题通常最简洁。
  • echo ...: 输出最终的标题。

保存并更新

保存修改后的 list_article.htm 文件,为了看到效果,你需要去后台的“更新系统”中,选择“更新栏目HTML”和“更新文档HTML”,重新生成一下栏目页面的静态文件。

效果预览:

  • 栏目首页 (第1页): 产品中心 - 我的公司名称
  • 栏目第2页: 产品中心 - 第2页 - 我的公司名称
  • 栏目第3页: 产品中心 - 第3页 - 我的公司名称

修改核心文件 arc.listview.class.php (不推荐,仅作了解)

如果你需要对标题进行更复杂的控制,或者想让所有栏目都生效而不需要修改每个模板,可以考虑此方法。请务必先备份文件!

找到并打开核心文件

通过 FTP 或服务器文件管理器,找到并下载 /include/arc.listview.class.php 文件。

定位并修改函数

在这个文件中,找到 function GetPageTitle() 函数(大约在 580 行左右,不同版本可能略有差异)。

找到类似这样的代码段:

function GetPageTitle()
{
    $this->Fields['title'] = $this->Fields['title']."-".$this->PageNo;
    if($this->PageNo>1)
    {
        $this->Fields['title'] = $this->Fields['title']."-".$this->PageNo;
    }
    $this->Fields['title'] = $this->Fields['title']."-".$this->Fields['typename'];
    return $this->Fields['title'];
}

注意: 不同版本的 DedeCMS,这个函数的默认实现可能不同,有的版本默认就会加上 -第N页,我们的目标是优化它。

替换函数代码

将整个 GetPageTitle() 函数替换为以下优化后的代码:

function GetPageTitle()
{
    // 获取栏目名称
    $typename = $this->Fields['typename'];
    // 获取当前页码
    $pageno = $this->PageNo;
    // 判断是否为第一页
    if ($pageno == 1) {
        // 如果是第一页,只返回栏目名
        $this->Fields['title'] = $typename;
    } else {
        // 如果不是第一页,返回“栏目名 - 第N页”
        $this->Fields['title'] = $typename . ' - 第' . $pageno . '页';
    }
    // 最终的标题会在后面拼接上网站名,所以这里只返回栏目部分即可
    return $this->Fields['title'];
}

保存文件并上传

保存修改后的 arc.listview.class.php 文件,并上传到服务器覆盖原文件。

注意:

  • 这个修改是全局性的,会影响所有使用此列表逻辑的栏目。
  • 当你升级 DedeCMS 时,这个文件会被新版本覆盖,你需要重新修改。
  • 如果你的网站开启了“静态化”,修改后需要去后台重新生成所有栏目页面的 HTML 文件才能看到效果。

总结与建议

特性 方法一 (修改模板) 方法二 (修改核心)
安全性 ,不涉及核心文件,升级无忧。 ,修改核心文件,可能导致未知错误,升级会被覆盖。
灵活性 ,可以为不同栏目设置不同的标题模板。 ,全局统一,无法针对单个栏目特殊处理。
维护性 ,修改集中在模板文件,易于管理和查找。 ,修改分散在核心文件中,不易维护。
适用场景 绝大多数情况,推荐所有用户使用。 需要统一、全局的复杂逻辑,且不介意升级后重复修改的用户。

强烈推荐使用【方法一】,它安全、灵活,并且完全能满足绝大多数的 SEO 优化需求,只有在你有非常特殊且统一的需求时,才考虑使用【方法二】,并且一定要做好备份。

-- 展开阅读全文 --
头像
织梦 频道页调用联动
« 上一篇 今天
dede 获取当前时间
下一篇 » 今天

相关文章

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

目录[+]