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

我们的目标是实现这样的效果:
- 第1页:
_标签名_ - 网站名称 - 第2页:
_标签名_第2页 - 网站名称 - 第3页:
_标签名_第3页 - 网站名称 - 以此类推...
下面我将提供两种方法,一种是修改核心文件(最直接、最稳定),另一种是使用自定义函数(更灵活,推荐)。
修改核心文件 (taglist.php)
这种方法直接修改DedeCMS处理Tag列表页的PHP文件,实现起来简单直接,但升级DedeCMS时可能会被覆盖。
操作步骤:

-
找到文件 打开你的DedeCMS安装目录,找到并编辑文件:
/include/taglib/taglib/tag.php -
定位代码 在这个文件中,找到获取Tag列表标题的代码,通常在
GetTags()函数附近,你需要找到类似下面这行代码:$this->Fields['title'] = $this->TypeLink->TypeInfos['typename'].'-'.$this->Fields['tagname'];
这行代码的作用是组合标题,格式为
栏目名-标签名,我们需要修改它,让它支持分页。 -
修改代码 将上面的代码替换为以下代码:
(图片来源网络,侵删)// 获取当前页码 $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来决定标题的格式。
-
保存并测试 保存修改后的
tag.php文件,访问你的Tag列表页,点击第二页、第三页等,查看页面源代码(Ctrl+U)或浏览器标题,你会发现标题已经根据页码动态变化了。
使用自定义函数(推荐)
这种方法不修改核心文件,而是在模板中通过自定义函数来实现,这样做的好处是,在升级DedeCMS时,你的修改不会被覆盖,更加安全和灵活。
操作步骤:
-
创建自定义函数文件 在你的DedeCMS根目录下,创建一个新文件,
myfunctions.php。 -
编写函数 在
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; } }这个函数的逻辑和方法一中的核心代码是完全一样的。
-
引入自定义函数 为了让DedeCMS能识别并使用这个新函数,你需要引入它,打开
include/common.inc.php文件,在文件的最后(在?>之前)添加以下代码:// 引入自定义函数 require_once(DEDEROOT.'myfunctions.php');
注意:
DEDEROOT是DedeCMS定义的一个常量,代表网站根目录,如果你的myfunctions.php文件不在根目录,请相应地修改路径。 -
在模板中调用函数 打开你的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']:将当前页码作为第二个参数传递给函数。
-
保存并测试 保存修改后的模板文件
taglist.htm,然后清空一下网站缓存(在DedeCMS后台的“系统” -> “一键更新缓存”),再访问Tag列表页进行测试,你会发现标题已经正确分页了。
总结与对比
| 特性 | 修改核心文件 | 使用自定义函数 |
|---|---|---|
| 优点 | 实现简单,直接修改逻辑,一步到位。 | 不修改核心文件,升级无忧,代码复用性强。 |
| 缺点 | 升级DedeCMS后,修改会被覆盖,需要重新修改。 | 步骤稍多,需要创建文件、引入函数、修改模板。 |
| 推荐度 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
强烈推荐使用方法二(自定义函数),因为它更符合网站长期维护的最佳实践,可以避免因升级导致的功能丢失问题。
希望这个详细的教程能帮助你解决问题!如果在操作中遇到任何困难,欢迎随时提问。
