dede自定义分页样式如何实现?

99ANYc3cd6
预计阅读时长 28 分钟
位置: 首页 DEDE建站 正文

核心思路

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

dede自定义分页样式
(图片来源网络,侵删)
  1. 修改 HTML 结构:修改分页生成的 HTML 标签,使其更容易用 CSS 进行样式控制,默认的 li 标签和 span 标签混杂,我们可以统一使用 li
  2. 编写 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.cssmain.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;

修改点解析:

  1. 所有分页项(首页、上一页、页码、下一页、末页)都被统一放进了 <li> 标签里。
  2. 当前页 ($i==$this->PageNo) 的 li 添加了 class="thisclass"
  3. 禁用状态的链接(如第一页时“上一页”)被添加了 class="disabled",并且将 <a> 标签换成了 <span>,防止点击。
  4. 整个分页列表被包裹在一个 <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 的分页样式!

-- 展开阅读全文 --
头像
dede从第几条开始读?数据起始位置如何确定?
« 上一篇 03-02
dede登录验证码错误
下一篇 » 03-02
取消
微信二维码
支付宝二维码