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

核心思路
要修改栏目分页标题,主要有两种方法:
- 修改模板文件 (推荐,灵活且安全):通过修改
list_article.htm模板文件,使用 DedeCMS 的内置标签和 PHP 代码来动态生成标题,这是最常用也是最安全的方法。 - 修改核心函数 (不推荐,风险高):直接修改
/include/arc.listview.class.php这个核心文件,这种方法功能最强大,但升级 DedeCMS 时会被覆盖,且修改不当可能导致网站出错。
修改模板文件 list_article.htm (推荐)
这是最主流的方法,我们通过在模板文件中添加判断逻辑来实现。
找到并打开模板文件
登录你的 DedeCMS 后台,进入 模板 -> 默认模板管理,找到你当前栏目正在使用的列表模板,通常是 list_article.htm,点击后面的“修改”按钮,进入编辑界面。
标签
在 list_article.htm 文件中,找到 <title> 标签,它通常在文件的头部,类似这样:

编写新的标题逻辑
我们将用 {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 优化需求,只有在你有非常特殊且统一的需求时,才考虑使用【方法二】,并且一定要做好备份。
