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
相关产品推荐
相关产品推荐

