核心思路
自定义分页样式主要涉及两个方面:

- 修改 HTML 结构:修改分页生成的 HTML 标签,使其更容易用 CSS 进行样式控制,默认的
li标签和span标签混杂,我们可以统一使用li- 编写 CSS 样式:针对新的 HTML 结构,编写 CSS 来定义每个分页按钮(首页、上一页、页码、下一页、末页)的外观、颜色、悬停效果等。
直接修改模板文件(推荐,简单直接)
这是最常用也是最简单的方法,直接在列表页模板文件中进行修改。
步骤 1:定位并打开列表页模板文件
你的列表页模板文件通常位于 /templets/你的模板目录/ 目录下,文件名可能是 list_栏目ID.htm 或者 list_article.htm。
用 Dreamweaver、VS Code 或其他代码编辑器打开这个文件。
步骤 2:找到分页代码
在模板文件中,找到调用分页的代码,它通常是这样的形式:
{dede:pagelist listsize='5' listitem='index pre pageno next end '/}
或者
{dede:pagelist listsize='5' listitem='index pre pageno next end '/}
<div class="dede_pages">
<ul class="pagelist">
<!-- 分页链接会在这里动态生成 -->
</ul>
</div>
我们的目标就是修改 {dede:pagelist} 这个标签。
步骤 3:修改 pagelist 标签属性
{dede:pagelist} 标签有一个非常重要的属性:tagid,通过设置 tagid,我们可以指定分页容器的 ID,然后通过 CSS 精准地控制它。
修改你的分页标签,增加 tagid 属性,并可以调整 listitem 来显示你需要的分页项。
修改后的代码示例:
<!-- 在需要显示分页的地方,通常在列表循环 {dede:list} 之后 -->
{dede:list pagesize='10'}
<!-- 你的列表内容 -->
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p>[field:description/]...</p>
{/dede:list}
<!-- 自定义分页标签 -->
<div class="page-wrap">
{dede:pagelist listitem='index pre pageno next end' listsize='3' tagid='pagelist'}
</div>
属性解释:
listitem='index pre pageno next end':设置显示哪些分页项。index: 首页pre: 上一页pageno: 页码next: 下一页end: 末页
listsize='3':显示的页码按钮数量,当前页码前后各显示 3 个。tagid='pagelist':这是关键! 它会给包裹分页链接的ul容器设置一个id="pagelist",方便我们用 CSS 选中。
步骤 4:添加自定义 CSS 样式
打开你的模板的全局 CSS 文件(通常在 /templets/你的模板目录/style/ 目录下,如 style.css 或 main.css),在文件末尾添加以下 CSS 代码。
这里提供几种不同风格的样式供你选择和修改。
样式示例 1:经典按钮风格
这种样式类似很多网站的分页,清晰明了。
/* 分页容器样式 */
.page-wrap {
text-align: center;
margin: 30px 0;
font-size: 14px;
}
/* 分页列表通用样式 */
.page-wrap #pagelist {
display: inline-block; /* 让ul水平排列 */
list-style: none;
padding: 0;
margin: 0;
border: 1px solid #e1e1e1;
border-radius: 5px;
overflow: hidden; /* 清除浮动,让圆角生效 */
}
/* 分页列表项(li)样式 */
.page-wrap #pagelist li {
float: left; /* 让li水平排列 */
margin: 0;
}
/* 分页链接(a)和普通文本(span)的通用样式 */
.page-wrap #pagelist li a,
.page-wrap #pagelist li span {
display: block;
padding: 8px 15px;
color: #333;
text-decoration: none;
border-right: 1px solid #e1e1e1; /* 添加分隔线 */
}
/* 去掉最后一个li的右边框 */
.page-wrap #pagelist li:last-child a,
.page-wrap #pagelist li:last-child span {
border-right: none;
}
/* 链接的悬停效果 */
.page-wrap #pagelist li a:hover {
background-color: #f8f8f8;
}
/* 当前页码的样式(通常是一个span标签) */
.page-wrap #pagelist .thisclass {
background-color: #007bff;
color: #fff;
font-weight: bold;
cursor: default; /* 鼠标指针默认 */
}
/* 禁用状态的样式(如首页、上一页在第一页时) */
.page-wrap #pagelist .disabled a,
.page-wrap #pagelist .disabled span {
color: #ccc;
cursor: not-allowed;
}
样式示例 2:现代简洁风格
这种样式更扁平化,没有边框,通过背景色区分。
/* 分页容器样式 */
.page-wrap {
text-align: center;
margin: 30px 0;
}
/* 分页列表通用样式 */
.page-wrap #pagelist {
display: inline-flex; /* 使用flex布局,更现代 */
list-style: none;
padding: 0;
margin: 0;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
/* 分页列表项(li)样式 */
.page-wrap #pagelist li {
margin: 0;
}
/* 分页链接(a)和普通文本(span)的通用样式 */
.page-wrap #pagelist li a,
.page-wrap #pagelist li span {
display: block;
padding: 10px 15px;
color: #555;
text-decoration: none;
transition: all 0.3s ease; /* 添加过渡动画 */
}
/* 当前页码的样式 */
.page-wrap #pagelist .thisclass {
background-color: #f0f0f0;
color: #333;
font-weight: bold;
cursor: default;
}
/* 链接的悬停效果 */
.page-wrap #pagelist li a:hover {
background-color: #e9ecef;
}
/* 禁用状态的样式 */
.page-wrap #pagelist .disabled a,
.page-wrap #pagelist .disabled span {
color: #ccc;
cursor: not-allowed;
background-color: transparent;
}
修改 include/arc.listview.class.php 文件(进阶,一劳永逸)
如果你想让所有使用默认分页的模板都生效,或者需要更彻底地控制 HTML 结构,可以修改 DedeCMS 的核心类文件。
⚠️ 警告: 修改核心文件后,在升级 DedeCMS 时这些修改会被覆盖,请务必提前备份好原始文件!
步骤 1:找到并打开文件
文件路径:/include/arc.listview.class.php
步骤 2:找到 GetPageListDM 方法
在这个文件中,搜索 GetPageListDM 函数,这个函数负责生成分页的 HTML 代码。
步骤 3:修改 HTML 输出代码
在 GetPageListDM 函数中,找到生成 li 标签的部分,你会看到类似 $listitem = "<li><a href='$jurl'>"; 这样的代码。
你需要修改这里的逻辑,将所有分页项都统一用 <li> 标签包裹,并给不同的项加上特定的 class,方便 CSS 识别。
这是一个修改示例(仅供参考,具体代码可能因版本不同而有差异):
// ... 在 GetPageListDM 函数内部 ...
$liststr = "";
$totalpage = ceil($this->TotalResult / $this->PageSize);
$maininfo = "<li><span class='pageinfo'>共 <strong>{$this->TotalResult}</strong> 条记录</span></li>";
$listdd = "";
$index = ($this->PageNo - 1) % $listsize ? ($this->PageNo - $this->PageNo % $listsize) + 1 : $this->PageNo - $listsize;
if ($index < 1) $index = 1;
$listdd .= "<li><a href='".$this->GetFirstPage()."'>首页</a></li>";
if($this->PageNo != 1) {
$listdd .= "<li><a href='".$this->GetPrePage()."'>上一页</a></li>";
}
else {
$listdd .= "<li class='disabled'><span>上一页</span></li>";
}
for($i=$index;$i<=$index+$listsize && $i<=$totalpage;$i++) {
if($i==$this->PageNo) {
$listdd .= "<li class='thisclass'><span>{$i}</span></li>";
}
else {
$listdd .= "<li><a href='".$this->GetPageListUrl($i)."'>".$i."</a></li>";
}
}
if($this->PageNo != $totalpage) {
$listdd .= "<li><a href='".$this->GetNextPage()."'>下一页</a></li>";
}
else {
$listdd .= "<li class='disabled'><span>下一页</span></li>";
}
$listdd .= "<li><a href='".$this->GetLastPage()."'>末页</a></li>";
$liststr = "<ul class='pagelist'>".$maininfo.$listdd."</ul>";
// ... 函数最后返回 $liststr ...
return $liststr;
修改点解析:
- 所有分页项(首页、上一页、页码、下一页、末页)都被统一放进了
<li>标签里。 - 当前页 (
$i==$this->PageNo) 的li添加了class="thisclass"。 - 禁用状态的链接(如第一页时“上一页”)被添加了
class="disabled",并且将<a>标签换成了<span>,防止点击。 - 整个分页列表被包裹在一个
<ul class="pagelist">中。
步骤 4:编写对应的 CSS
由于你修改了 HTML 结构,现在你可以编写更简洁的 CSS 来匹配它,CSS 的写法可以参考方法一中的样式示例,只需要将选择器 .page-wrap #pagelist 改为 .pagelist 即可。
/* 对应修改后的HTML结构的CSS */
.pagelist {
display: inline-flex;
list-style: none;
padding: 0;
margin: 0;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.pagelist li {
margin: 0;
}
.pagelist li a,
.pagelist li span {
display: block;
padding: 10px 15px;
color: #555;
text-decoration: none;
}
.pagelist .thisclass span {
background-color: #f0f0f0;
color: #333;
font-weight: bold;
cursor: default;
}
.pagelist li a:hover {
background-color: #e9ecef;
}
.pagelist .disabled span {
color: #ccc;
cursor: not-allowed;
background-color: transparent;
}
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 修改模板 | - 安全,不影响核心文件 - 升级时不会被覆盖 - 针对性强,可按模板定制 |
- 每个列表页模板都需要修改一次 | - 绝大多数情况下的首选 - 需要为不同栏目设置不同分页样式时 |
| 修改核心文件 | - 一劳永逸,所有列表页自动生效 - 可完全控制HTML结构 |
- 有升级风险,修改会被覆盖 - 操作稍复杂,容易出错 |
- 网站所有列表页需要统一分页样式 - 对默认分页结构有深度定制需求时 |
对于大多数用户来说,强烈推荐使用方法一,它简单、安全、灵活,希望这个详细的教程能帮助你成功美化 DedeCMS 的分页样式!
