DedeCMS 的分页功能主要由两个部分组成:

- 底层模板标签:用于在列表页或内容页中调用并显示分页链接。
- PHP 函数:用于生成分页的逻辑和数据。
修改分页通常涉及以下几种常见需求:
- 修改分页样式:改变分页链接的外观,如颜色、边框、间距等。
- 修改分页文本:修改“首页”、“上一页”、“下一页”、“末页”等显示的文字。
- 修改分页数量:调整每页显示的条目数。
- 添加自定义功能:如添加“跳转到指定页”的功能。
下面我将针对这些需求,提供详细的修改方法。
准备工作:找到并备份关键文件
在进行任何修改之前,强烈建议你先备份以下文件,以防修改出错导致网站无法正常工作。
- 模板文件:你正在使用的列表模板,通常位于
/templets/你的模板目录/ list_栏目ID.htm。 - 核心PHP文件:
/include/arc.listview.class.php:列表页分页逻辑的核心文件。/include/arc.archives.class.php页(文章页)分页逻辑的核心文件。/include/dedehtml.class.php:包含GetPageList()函数,一个更通用的分页函数,部分模板或插件可能会用到。
修改分页样式(最常用)
这是最常见的需求,通常通过修改 CSS 样式来实现,最安全、最推荐。

步骤 1:在模板文件中找到分页标签
在你的列表模板文件 (list_xxx.htm) 中,找到类似这样的分页标签:
<div class="dede_pages">
<ul class="pagelist">
{dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5" /}
</ul>
</div>
步骤 2:分析生成的 HTML 结构
DedeCMS 的 pagelist 标签会生成一个无序列表 (<ul>),每个分页链接都是一个列表项 (<li>),默认情况下,DedeCMS 会给不同状态的链接加上不同的 class,
class="pageinfo":显示总页数等信息的<li>。class="pagea":普通页码链接。class="pagepre":上一页链接。class="pagenext":下一页链接。class="pagebuttom":首页、末页链接。class="pagecurrent":当前页链接。
步骤 3:编写或修改 CSS 样式
在你的模板的 CSS 文件中(/templets/你的模板目录/style/css.css),添加或修改针对这些 class 的样式。
示例:创建一个现代化的分页样式
/* 分页容器整体样式 */
.dede_pages {
text-align: center;
margin: 20px 0;
}
/* 分页列表样式 */
.pagelist {
display: inline-block;
list-style: none;
padding: 0;
margin: 0;
border: 1px solid #ddd;
border-radius: 3px;
overflow: hidden; /* 用于圆角效果 */
}
/* 分页列表项(链接)样式 */
.pagelist li {
float: left; /* 让链接水平排列 */
}
.pagelist a {
display: block;
padding: 8px 12px;
text-decoration: none;
color: #333;
border-right: 1px solid #ddd;
}
/* 最后一项没有右边框 */
.pagelist li:last-child a {
border-right: none;
}
/* 鼠标悬停效果 */
.pagelist a:hover {
background-color: #f5f5f5;
}
/* 当前页样式 */
.pagelist .pagecurrent {
display: block;
padding: 8px 12px;
background-color: #007bff;
color: #fff;
font-weight: bold;
}
/* 上一页/下一页/首页/末页 样式 */
.pagelist .pagepre a,
.pagelist .pagenext a,
.pagelist .pagebuttom a {
padding: 8px 16px; /* 可以让这些按钮宽一些 */
}
/* 禁用状态(例如在第一页时“上一页”和“首页”会变成span) */
.pagelist .pagepre span,
.pagelist .pagenext span,
.pagelist .pagebuttom span {
display: block;
padding: 8px 12px;
color: #ccc;
cursor: not-allowed;
}
将这段 CSS 添加到你的样式表中,分页的外观就会立刻改变,这种方法的好处是不涉及 PHP 文件修改,非常安全。
修改分页文本和数量
如果你需要修改“首页”、“上一页”等文字,或者每页显示的条目数,就需要修改 PHP 文件了。
修改分页显示文字
编辑文件 /include/arc.listview.class.php。
找到 GetPageListSTL() 函数,你会看到类似这样的代码:
// ... 在 GetPageListSTL 函数内部 ... $listLen = "5"; // 控制显示的页码数量 $otaltem = $this->TotalResult; $totalpage = ceil($otaltem / $this->PageSize); $geturl = "GetArcList"; // 获取当前页码 $pageNo = $this->PageNo; // 获取栏目ID $TypeID = $this->TypeID; // 定义分页文本 $prepage = "<li><a href='".$purl."/".$pageNo-1."'>".$this->PrePage."</a></li>"; $nextpage = "<li><a href='".$purl."/".$pageNo+1."'>".$this->NextPage."</a></li>"; $indexpage = "<li><a href='".$purl."/".$index."'>".$this->IndexPage."</a></li>"; $endpage = "<li><a href='".$purl."/".$totalpage."'>".$this->EndPage."</a></li>";
这里的 $this->PrePage、this->NextPage 等变量就是定义分页文本的地方,通常在类的开头或初始化函数中,你会找到这些变量的定义,
// 在 ArcListView 类的属性中定义 var $PrePage = '上一页'; var $NextPage = '下一页'; var $IndexPage = '首页'; var $EndPage = '末页'; var $ListTag = 'li'; // 默认的列表标签
修改方法:
直接修改这些变量的值即可,将 var $PrePage = '上一页'; 改为 var $PrePage = '«';。
修改每页显示的条目数
这通常在调用列表标签时通过 pagesize 参数控制,或者在栏目/频道设置中指定。
-
在模板中指定: 在列表页的调用标签中,可以覆盖默认的每页条数。
{dede:list pagesize='20'}这会将当前列表页的每页显示数量设置为 20 条。
-
在后台设置: 进入后台 -> “核心” -> “频道设置” -> “列表目录选项”,可以设置默认的列表页面大小。
添加“跳转到指定页”功能
DedeCMS 默认没有这个功能,需要手动添加,这需要同时修改模板和 PHP 文件。
步骤 1:修改 PHP 文件 (/include/arc.listview.class.php)
在 GetPageListSTL() 函数中,找到生成 $listdd 的地方,在循环结束后,添加跳转框的 HTML 代码。
// ... 在 GetPageListSTL 函数内,生成页码列表的循环之后 ... $listdd .= "</ul>"; // 【新增】添加跳转功能 $listdd .= "<span class='page-go'>"; $listdd .= "到第<input type='text' name='page' size='3' class='input-txt' />页"; $listdd .= "<input type='button' class='input-btn' value='Go' onclick='goPage(\"".$purl."\",this.form)'/>"; $listdd .= "</span>"; // ... 函数返回部分 ... return $listdd;
步骤 2:修改模板文件 (list_xxx.htm)
在分页标签的 ul 容器内,添加一个 form 表单,并确保 pagelist 标签生成的跳转代码能被正确包含。
<div class="dede_pages">
<ul class="pagelist">
{dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5" /}
<!-- 【新增】这里不需要再添加,因为PHP里已经生成了 -->
</ul>
</div>
<!-- 【新增】添加一个隐藏的表单,用于提交跳转请求 -->
<form name="pagelistform" action="" method="get" style="display:none;">
<input type="hidden" name="tid" value="{dede:field.tid/}" />
<!-- 可以添加其他需要的隐藏参数,如 -->
<!-- <input type="hidden" name="keyword" value="{dede:field.keyword/}" /> -->
</form>
<!-- 【新增】添加JS处理函数 -->
<script type="text/javascript">
function goPage(purl, e) {
var page = e.elements['page'].value;
if(isNaN(page) || page < 1){
alert('请输入正确的页码!');
e.elements['page'].focus();
return false;
}
// 获取总页数,可以从PHP传过来,也可以在这里用JS计算
var totalpage = "{dede:pagelist listsize='0' iteminfo='totalpage'/}";
if(page > totalpage){
alert('请输入正确的页码!');
e.elements['page'].focus();
return false;
}
// 将页码值赋给隐藏表单的tid参数,并提交
document.pagelistform.action = purl + '/' + page;
document.pagelistform.submit();
}
</script>
步骤 3:添加 CSS 样式
为了让跳转框更美观,在 CSS 文件中添加样式:
/* 跳转框样式 */
.page-go {
display: inline-block;
margin-left: 10px;
line-height: 32px; /* 与分页按钮对齐 */
vertical-align: middle;
}
.page-go .input-txt {
width: 40px;
height: 30px;
border: 1px solid #ddd;
margin: 0 5px;
text-align: center;
}
.page-go .input-btn {
width: 50px;
height: 32px;
border: 1px solid #ddd;
background: #f5f5f5;
cursor: pointer;
}
总结与建议
| 修改需求 | 推荐方法 | 涉及文件 | 风险等级 |
|---|---|---|---|
| 修改样式 | 修改 CSS | 模板 CSS 文件 | 低 |
| 修改文字 | 修改 PHP 变量 | /include/arc.listview.class.php |
中 |
| 修改每页数量 | 使用模板参数或后台设置 | 模板文件 / 后台 | 低 |
| 添加跳转功能 | 修改 PHP + 模板 + JS | /include/arc.listview.class.php, 模板文件, JS |
高 |
重要提示:
- 修改核心 PHP 文件后,如果未来升级 DedeCMS,你的修改可能会被覆盖,请务必保留一份修改记录或使用版本控制工具。
- 对于不熟悉 PHP 的用户,强烈建议优先使用 CSS 方法来修改分页外观,这是最安全、最灵活的方式。
- 在修改前,务必备份!
