You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为PHP分页脚本添加页码省略号(页码过多时)

解决PHP分页添加省略号的问题

嘿,我看了你的分页代码,确实当页码数量过多时,只隐藏多余页码不够直观,得加上省略号来提示用户中间还有更多页码。我来帮你调整逻辑,实现这个常用的分页效果:

核心思路

咱们采用分页的经典逻辑:

  • 始终显示第一页和最后一页
  • 当前页前后各显示若干页(比如2页,可调整)
  • 如果当前页离第一页/最后页有间隔,就插入省略号

修改后的完整代码

<?php
// 确保以下变量已正确赋值:
// $thispage = 当前页码(从$_GET['page']获取,默认值设为1)
// $nbpages = 总页数(根据你的数据总量计算得到)

// 调整这个值控制当前页前后显示的页码数,比如设为2就是前后各2页
$showPagesAround = 2;

// 1. 显示第一页
$l = 1;
if($_GET['page'] != "") {
    $nlink = str_replace($link[$czlony-2], 'page-'.$l, $_SERVER['REQUEST_URI']);
} else {
    $nlink = '/tours/page-'.$l.'/';
}
echo '<li';
if($l == $thispage) echo ' class="active"'; // 给当前页加高亮类,可根据CSS调整
echo '><a href="'.$nlink.'">'.$l.'</a></li>';

// 2. 第一页后插入省略号(如果当前页离第一页有间隔)
if($thispage > $showPagesAround + 1) {
    echo '<li><span>...</span></li>';
}

// 3. 显示当前页前后的页码
$startPage = max(2, $thispage - $showPagesAround);
$endPage = min($nbpages - 1, $thispage + $showPagesAround);
for($l = $startPage; $l <= $endPage; $l++) {
    if($_GET['page'] != "") {
        $nlink = str_replace($link[$czlony-2], 'page-'.$l, $_SERVER['REQUEST_URI']);
    } else {
        $nlink = '/tours/page-'.$l.'/';
    }
    echo '<li';
    if($l == $thispage) echo ' class="active"';
    echo '><a href="'.$nlink.'">'.$l.'</a></li>';
}

// 4. 最后一页前插入省略号(如果当前页离最后页有间隔)
if($thispage < $nbpages - $showPagesAround) {
    echo '<li><span>...</span></li>';
}

// 5. 显示最后一页(总页数大于1时才显示)
if($nbpages > 1) {
    $l = $nbpages;
    if($_GET['page'] != "") {
        $nlink = str_replace($link[$czlony-2], 'page-'.$l, $_SERVER['REQUEST_URI']);
    } else {
        $nlink = '/tours/page-'.$l.'/';
    }
    echo '<li';
    if($l == $thispage) echo ' class="active"';
    echo '><a href="'.$nlink.'">'.$l.'</a></li>';
}
?>

关键部分解释

  1. $showPagesAround变量:你可以根据需求调整这个数值,比如设为3,就会在当前页前后各显示3个页码,灵活控制分页栏的长度。
  2. 省略号判断逻辑:
    • 当当前页比$showPagesAround + 1大时,说明第一页和当前页之间有未显示的页码,插入省略号
    • 当当前页比$nbpages - $showPagesAround小时,说明当前页和最后一页之间有未显示的页码,插入省略号
  3. 页码范围控制:用max(2, ...)避免重复显示第一页,用min($nbpages -1, ...)避免重复显示最后一页
  4. 当前页高亮:我加了class="active"的判断,你可以根据自己的CSS样式调整类名,让当前页更显眼。

这样修改后,不管总页数有多少,分页栏都会保持简洁,同时清晰提示用户还有更多页码可以跳转~

内容的提问来源于stack exchange,提问作者Maciek M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:08:33