dede tag页标题分页

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

这个需求非常常见,因为一个热门的Tag可能会有成百上千篇文章,默认情况下,所有分页的Tag页标题都是一样的,这对于SEO(搜索引擎优化)非常不利,搜索引擎会认为这些页面是重复内容,从而降低其权重。

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

我们的目标是实现这样的效果:

  • 第1页:_标签名_ - 网站名称
  • 第2页:_标签名_第2页 - 网站名称
  • 第3页:_标签名_第3页 - 网站名称
  • 以此类推...

下面我将提供两种方法,一种是修改核心文件(最直接、最稳定),另一种是使用自定义函数(更灵活,推荐)。


修改核心文件 (taglist.php)

这种方法直接修改DedeCMS处理Tag列表页的PHP文件,实现起来简单直接,但升级DedeCMS时可能会被覆盖。

操作步骤:

dede tag页标题分页
(图片来源网络,侵删)
  1. 找到文件 打开你的DedeCMS安装目录,找到并编辑文件: /include/taglib/taglib/tag.php

  2. 定位代码 在这个文件中,找到获取Tag列表标题的代码,通常在 GetTags() 函数附近,你需要找到类似下面这行代码:

    $this->Fields['title'] = $this->TypeLink->TypeInfos['typename'].'-'.$this->Fields['tagname'];

    这行代码的作用是组合标题,格式为 栏目名-标签名,我们需要修改它,让它支持分页。

  3. 修改代码 将上面的代码替换为以下代码:

    dede tag页标题分页
    (图片来源网络,侵删)
    // 获取当前页码
    $pageNo = (int)$GLOBALS['PageNo'];
    // 获取标签名
    $tagName = $this->Fields['tagname'];
    // 构建新的标题
    if ($pageNo > 1) {
        // 如果不是第一页,则在标签名后加上页码
        $this->Fields['title'] = $tagName . '第' . $pageNo . '页 - ' . $GLOBALS['cfg_webname'];
    } else {
        // 如果是第一页,则使用默认格式
        $this->Fields['title'] = $tagName . ' - ' . $GLOBALS['cfg_webname'];
    }

    代码解释:

    • $GLOBALS['PageNo']:这是DedeCMS内置的变量,用来表示当前的页码。
    • $GLOBALS['cfg_webname']:这是DedeCMS的全局变量,用来获取你的网站名称。
    • 我们通过判断 $pageNo 是否大于1来决定标题的格式。
  4. 保存并测试 保存修改后的 tag.php 文件,访问你的Tag列表页,点击第二页、第三页等,查看页面源代码(Ctrl+U)或浏览器标题,你会发现标题已经根据页码动态变化了。


使用自定义函数(推荐)

这种方法不修改核心文件,而是在模板中通过自定义函数来实现,这样做的好处是,在升级DedeCMS时,你的修改不会被覆盖,更加安全和灵活。

操作步骤:

  1. 创建自定义函数文件 在你的DedeCMS根目录下,创建一个新文件,myfunctions.php

  2. 编写函数myfunctions.php 文件中,添加以下PHP代码:

    /**
     * 用于生成带分页的Tag列表页标题
     * @param string $tagName 标签名
     * @param int $pageNo 当前页码
     * @return string 组合好的标题
     */
    function GetTagTitle($tagName, $pageNo)
    {
        global $cfg_webname;
        $pageNo = (int)$pageNo;
        if ($pageNo > 1) {
            return $tagName . '第' . $pageNo . '页 - ' . $cfg_webname;
        } else {
            return $tagName . ' - ' . $cfg_webname;
        }
    }

    这个函数的逻辑和方法一中的核心代码是完全一样的。

  3. 引入自定义函数 为了让DedeCMS能识别并使用这个新函数,你需要引入它,打开 include/common.inc.php 文件,在文件的最后(在 ?> 之前)添加以下代码:

    // 引入自定义函数
    require_once(DEDEROOT.'myfunctions.php');

    注意DEDEROOT 是DedeCMS定义的一个常量,代表网站根目录,如果你的 myfunctions.php 文件不在根目录,请相应地修改路径。

  4. 在模板中调用函数 打开你的Tag列表页模板文件,这个文件通常位于: /templets/default/taglist.htm

    找到原来显示标题的地方,它可能是一个这样的标签:

    将其修改为调用我们刚刚创建的自定义函数:

    [field:tagname function="GetTagTitle(@me, $GLOBALS['PageNo'])"/]
    </title>

    标签解释:

    • {dede:field.tagname/}:获取当前标签的名称。
    • function="GetTagTitle(@me, $GLOBALS['PageNo'])":这是一个自定义函数调用。
      • @me:代表当前字段的值,在这里就是 tagname 的值。
      • $GLOBALS['PageNo']:将当前页码作为第二个参数传递给函数。
  5. 保存并测试 保存修改后的模板文件 taglist.htm,然后清空一下网站缓存(在DedeCMS后台的“系统” -> “一键更新缓存”),再访问Tag列表页进行测试,你会发现标题已经正确分页了。


总结与对比

特性 修改核心文件 使用自定义函数
优点 实现简单,直接修改逻辑,一步到位。 不修改核心文件,升级无忧,代码复用性强。
缺点 升级DedeCMS后,修改会被覆盖,需要重新修改。 步骤稍多,需要创建文件、引入函数、修改模板。
推荐度 ⭐⭐ ⭐⭐⭐⭐⭐

强烈推荐使用方法二(自定义函数),因为它更符合网站长期维护的最佳实践,可以避免因升级导致的功能丢失问题。

希望这个详细的教程能帮助你解决问题!如果在操作中遇到任何困难,欢迎随时提问。

-- 展开阅读全文 --
头像
织梦如何调用第一个子栏目?
« 上一篇 02-17
织梦上一篇下一篇按钮如何自定义样式与链接?
下一篇 » 02-17

相关文章

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

目录[+]