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

PHP分页代码如何实现eclipse页码省略截断效果

PHP分页添加省略号(首尾保留)实现方案

核心逻辑

不需要遍历全部页码,按以下规则生成页码列表即可适配大数据量场景,避免页码栏过长:

  • 总页码 ≤ 7时,直接全量展示所有页码,无需省略号
  • 总页码 > 7时:
    • 固定保留前2页、最后2页
    • 固定展示当前页、当前页前后各2页
    • 页码区间不连续的缺口位置插入不可点击的省略号占位

修改后完整代码

直接替换原有的分页块代码即可,原有样式类完全保留:

<div id="pagination" class="mt-10 mb-10">
<?php
// 初始化分页链接字符串,避免未定义变量报错
$pagLink = '';
$adjacent = 2; // 当前页前后展示的相邻页码数量,可自行调整

// 上一页按钮
if($page >= 2){   
    echo "<a class='bg-slate-100 px-5 py-3 rounded-md mr-3 hover:bg-slate-300' href='?page=".($page-1)."'>Prev</a>";   
}

// 总页数较少时直接全量展示
if($number_of_page <= 7){
    for ($i=1; $i<=$number_of_page; $i++) {
        $activeClass = $i == $page ? 'bg-slate-300' : 'bg-slate-100';
        $pagLink .= "<a class='{$activeClass} px-5 py-3 rounded-md mr-3 hover:bg-slate-300' href='?page=".$i."'>".$i."</a>";
    }
}else{
    // 省略号占位元素
    $ellipsis = "<span class='bg-transparent px-5 py-3 rounded-md mr-3 cursor-not-allowed'>...</span>";

    // 生成前2页
    for($i=1; $i<=2; $i++){
        $activeClass = $i == $page ? 'bg-slate-300' : 'bg-slate-100';
        $pagLink .= "<a class='{$activeClass} px-5 py-3 rounded-md mr-3 hover:bg-slate-300' href='?page=".$i."'>".$i."</a>";
    }

    // 当前页靠近开头时,不需要前侧省略号
    if($page > $adjacent + 3){
        $pagLink .= $ellipsis;
    }

    // 生成当前页附近的页码
    $start = max(3, $page - $adjacent);
    $end = min($number_of_page - 2, $page + $adjacent);
    for($i = $start; $i <= $end; $i++){
        $activeClass = $i == $page ? 'bg-slate-300' : 'bg-slate-100';
        $pagLink .= "<a class='{$activeClass} px-5 py-3 rounded-md mr-3 hover:bg-slate-300' href='?page=".$i."'>".$i."</a>";
    }

    // 当前页靠近结尾时,不需要后侧省略号
    if($page < $number_of_page - ($adjacent + 2)){
        $pagLink .= $ellipsis;
    }

    // 生成最后2页
    for($i = $number_of_page -1; $i <= $number_of_page; $i++){
        $activeClass = $i == $page ? 'bg-slate-300' : 'bg-slate-100';
        $pagLink .= "<a class='{$activeClass} px-5 py-3 rounded-md mr-3 hover:bg-slate-300' href='?page=".$i."'>".$i."</a>";
    }
}

echo $pagLink;

// 下一页按钮
if($page < $number_of_page){   
    echo "<a class='bg-slate-100 px-5 py-3 rounded-md mr-3 hover:bg-slate-300' href='?page=".($page+1)."'>Next</a>";   
}
?>
</div>

效果说明

通过调整代码里的$adjacent变量可以控制当前页前后展示的页码数量,默认值2的效果参考:

  • 当前页=3、总页数=10:1 2 3 4 5 ... 9 10
  • 当前页=10、总页数=20:1 2 ... 8 9 10 11 12 ... 19 20
  • 当前页=18、总页数=20:1 2 ... 16 17 18 19 20

注:代码修复了原代码未初始化$pagLink变量可能产生的PHP Notice报错,同时修正了原代码中page参数前多余空格的问题,抽离了选中态的class判断减少重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:03:19