DedeCMS 本身是中文开源系统,其默认分页标签 {dede:pagelist} 主要生成中文文本,如“首页”、“上一页”、“下一页”、“末页”,要实现英文分页,主要有两种方法:

- 修改系统文件 (直接修改,效果彻底)
- 使用CSS隐藏中文,替换为英文 (推荐,更灵活,不修改核心文件)
修改系统文件 (直接修改)
这种方法会直接修改 DedeCMS 的核心文件,使分页标签直接输出英文,优点是一劳永逸,缺点是升级系统后需要再次修改。
步骤:
-
找到并打开文件 在你的 DedeCMS 安装目录下,找到并打开以下文件:
/include/arc.archives.class.php这个文件是处理文章列表、文章内容等标签的核心类文件,分页逻辑就在这里。
-
定位代码 在
arc.archives.class.php文件中,搜索GetPageListDM函数,这个函数就是用来生成分页HTML的。
(图片来源网络,侵删) -
修改分页文本 在
GetPageListDM函数中,找到定义分页文本的代码,通常是$listdd = '';之后的一系列if判断。你需要找到类似下面这些行,并将其中的中文文本替换为英文:
// 原始代码 (中文) if($prepagenum==1) { $prepage.="<li><a class='page-prev' href='".$purl."start=0'>上一页</a></li>\r\n"; } else { $prepage.="<li><a class='page-prev' href='".$purl."start=".($prepagenum-2*$list_len)."'>上一页</a></li>\r\n"; } // ... 其他代码 ... if($nextpagenum<=$totalpage) { $nextpage.="<li><a class='page-next' href='".$purl."start=".$nextpagenum."'>下一页</a></li>\r\n"; } else { $nextpage.="<li><a class='page-next' href='#'>下一页</a></li>\r\n"; } // ... 其他代码 ... $listdd.="<li><a href='".$purl."start=0'>首页</a></li>\r\n"; // ... $listdd.="<li><a href='".$purl."start=".($totalpage-1)*$list_len."'>末页</a></li>\r\n"; -
替换为英文 将上述代码中的中文替换为英文:
// 修改后代码 (英文) if($prepagenum==1) { $prepage.="<li><a class='page-prev' href='".$purl."start=0'>Previous</a></li>\r\n"; } else { $prepage.="<li><a class='page-prev' href='".$purl."start=".($prepagenum-2*$list_len)."'>Previous</a></li>\r\n"; } // ... 其他代码 ... if($nextpagenum<=$totalpage) { $nextpage.="<li><a class='page-next' href='".$purl."start=".$nextpagenum."'>Next</a></li>\r\n"; } else { $nextpage.="<li><a class='page-next' href='#'>Next</a></li>\r\n"; } // ... 其他代码 ... $listdd.="<li><a href='".$purl."start=0'>First</a></li>\r\n"; // ... $listdd.="<li><a href='".$purl."start=".($totalpage-1)*$list_len."'>Last</a></li>\r\n";你还可以修改当前页的显示文本,比如将
[<span class='page_now'>1</span>]修改为<span class='page-now'>1</span>。
(图片来源网络,侵删) -
保存文件 保存修改后的
arc.archives.class.php文件。
注意:此方法会影响整个网站的所有分页,如果你的网站是中英文双语,并且需要分别显示中英文分页,此方法就不适用了。
使用CSS隐藏中文,替换为英文 (推荐)
这种方法不修改任何PHP文件,而是通过CSS隐藏默认的中文分页文本,然后在HTML中通过 :before 或 :after 伪元素添加英文文本,这是最灵活、最安全的方法,尤其适合双语网站。
步骤:
-
在模板文件中添加自定义CSS 在你的英文模板文件(
article_article_en.htm)的<head>部分添加以下CSS代码:<style> /* 1. 隐藏默认的中文分页文本 */ .dede-pages a, .dede-pages span { position: relative; /* 为伪元素定位提供参考 */ } .dede-pages a::before, .dede-pages span::before { content: attr(data-en-text); /* 使用 data-en-text 属性的值作为内容 */ display: inline-block; visibility: visible; } /* 隐藏原始的中文文本 */ .dede-pages a::after, .dede-pages span::after { content: attr(title); /* 默认织梦的文本在 title 属性里 */ visibility: hidden; height: 0; width: 0; overflow: hidden; } /* 特殊处理首页、末页等没有 title 的,直接隐藏 */ .dede-pages a[title="首页"]::after, .dede-pages a[title="上一页"]::after, .dede-pages a[title="下一页"]::after, .dede-pages a[title="末页"]::after, .dede-pages span[title]::after { visibility: hidden; height: 0; width: 0; overflow: hidden; } /* 可选:为当前页添加特殊样式 */ .dede-pages .page-now::before { content: attr(data-en-text); font-weight: bold; color: #ff6600; /* 高亮当前页 */ } .dede-pages .page-now::after { visibility: hidden; height: 0; width: 0; overflow: hidden; } </style> -
修改分页标签,添加
data-en-text属性 在你的模板文件中,找到{dede:pagelist}标签,我们需要给它添加一些自定义属性来告诉CSS每个链接应该显示什么英文。原始标签:
<div class="dede-pages"> {dede:pagelist listsize='5' listitem='index pre pageno next end'/} </div>修改后的标签 (使用自定义函数或手动修改): 直接手动修改标签不太现实,因为织梦会动态生成,我们需要通过修改模板文件来包裹
pagelist的输出,然后使用jQuery来动态添加属性,这比纯CSS更可靠。更推荐的方案 (结合JS):
a. 在模板中,给分页容器一个ID:
<div class="dede-pages" id="english-pagination"> {dede:pagelist listsize='5' listitem='index pre pageno next end'/} </div>b. 在模板底部引入jQuery,并添加以下脚本:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function(){ $('#english-pagination .dede-pages a').each(function(){ var $this = $(this); var href = $this.attr('href'); var text = $this.text().trim(); // 根据链接的文本或href特征来设置对应的英文 if (text == '首页' || href.indexOf('start=0') > -1) { $this.attr('data-en-text', 'First'); } else if (text == '末页') { $this.attr('data-en-text', 'Last'); } else if (text == '上一页') { $this.attr('data-en-text', 'Previous'); } else if (text == '下一页') { $this.attr('data-en-text', 'Next'); } else if (text.match(/^\d+$/)) { // 如果是纯数字,则为页码 $this.attr('data-en-text', text); } }); // 处理当前页 <span class="page-now">1</span> $('#english-pagination .dede-pages span.page-now').each(function(){ var text = $(this).text().trim(); $(this).attr('data-en-text', text); }); }); </script>c. CSS可以简化为:
.dede-pages a, .dede-pages span { visibility: hidden; /* 先隐藏所有 */ } .dede-pages a::before, .dede-pages span::before { content: attr(data-en-text); visibility: visible; }
这个JS方案非常灵活,可以精确控制每个分页元素显示的文本,并且不影响其他语言版本。
总结与对比
| 特性 | 方法一 (修改PHP文件) | 方法二 (CSS/JS方案) |
|---|---|---|
| 优点 | 一次性修改,永久生效。 性能最高,无额外请求。 |
不修改核心文件,升级无忧。 灵活,可针对不同模板定制。 适合多语言网站。 |
| 缺点 | 破坏性修改,升级后需重改。 影响全站,无法区分中英文。 容易出错。 |
需要额外的CSS或JS代码。 JS方案需要jQuery,有轻微性能开销。 |
| 适用场景 | 纯英文网站,且不打算未来升级。 | 强烈推荐,几乎所有场景,尤其是双语或多语言网站。 |
对于绝大多数用户,方法二 是更优的选择,它既安全又灵活,是现代前端开发的最佳实践。
