Products
96SEO 2025-09-10 00:16 1
在使用 Dedecms 进行内容管理时文章内容过长往往需要分页显示以提升阅读体验。Dedecms 默认的分页标签是 {dede:pagebreak/}
它可以自动将文章分割成多个页面。不过 当文章页数较多时默认分页显示所有页码,导致页面底部分页条过长,不仅影响美观,也不利于用户快速定位所需页面。
本文将结合最新版本的 Dedecms, 从源码层面讲解如何通过钩子方法控制文章分页显示的页码数量,实现“只显示当前页附近一定范围内的页码”,并提供完整代码示例及操作步骤,帮助大家轻松实现更美观实用的分页效果。
{dede:pagebreak/}
是 Dedecms 用于标识文章中分页位置的标签。在后台编辑器插入该标签后系统会自动将文章拆分成多页,并生成对应静态HTML或动态访问URL。
Dedecms 解析包含 {dede:pagebreak/}
的字段后将文章拆分为多个独立页面。负责生成分页导航的是 include/arc.archives.class.php
文件中的 GetPagebreak
方法。默认情况下该方法会循环输出所有页码链接,无论总页数多少。
问题场景:
解决思路:
- 限制每次只显示固定数量的页码, 中间尽量保持当前页居中; - 页码区间根据当前选中页; - 保持首页、尾页和上一页、下一页按钮完整可用; - 确保改动兼容动态和静态生成两种模式。
- 路径:/include/arc.archives.class.php
- 打开文件,在其中查找函数GetPagebreak
function GetPagebreak { // 省略部分代码 for { // 输出每个页码链接 } // 省略部分代码 }
// 设置最大展示数字按钮数量,推荐奇数方便居中
$total_list = 7;
if {
// 总数小于等于最大展示数,全都显示
$start = 1;
$end = $totalPage;
} else {
// 当前面临多于最大展示数字时根据当前页面区间
$offset = intval / 2);
if {
// 靠近首页时从头开始连续展示
$start = 1;
$end = $total_list;
} elseif {
// 靠近末尾时从后面开始连续展示
$start = $totalPage - $total_list + 1;
$end = $totalPage;
} else {
// 正常情况,保证当前页面居中
$start = $nowPage - $offset;
$end = $nowPage + $offset;
}
}
// 替换原来的for循环为如下:
for {
if {
echo "$i";
} else {
echo "";
}
}
public static function GetPagebreak
{
global $_sys_globals,$_cfg_basehost;
//...其他代码...
// 最大数字按钮数量
$total_list=7;
if{
$start=1;$end=$totalPage;
}else{
$offset=intval/2);
if{
$start=1;
$end=$total_list;
}elseif{
$start=$totalPage-$total_list+1;
$end=$totalPage;
}else{
$start=$now_page-$offset;
$end=$now_page+$offset;
}
}
for{
if{
echo "$i";
}else{
echo "";
}
// 此处可添加上下翻及首页尾处理逻辑...
}
//...其余逻辑...
}
注意:
* 示例 CSS,可放置至网站主样式表 style.css 中,一边模板中的 pagination 部分调用这个class即可生效 *
图X:修改后的源码片段截图示意 *请根据实际路径自行定位编辑*
图Y:前端实际呈现限制7个数字左右的美观导航条效果演示
Demand feedback