如何优化PHP分页器为Google样式,解决数据过多时分页过长问题
实现Google风格分页导航的修改方案
核心思路
Google分页的核心特点是:始终保留首页、末页入口,当前页前后仅显示固定数量的相邻页码,中间用省略号替代过多的页码项,既避免导航栏过长,又保证用户能快速跳转首尾页或相邻页面。
分页代码替换方案
将你原代码中<div class="paginador">部分的代码,替换为以下逻辑:
<div class="paginador"> <ul> <?php // 首页与上一页按钮 if ($pagina != 1) { ?> <li><a href="?pagina=1"><i class="fa-solid fa-backward-fast"></i></a></li> <li><a href="?pagina=<?php echo $pagina - 1; ?>"><i class="fa-solid fa-backward"></i></a></li> <?php } // 设置当前页前后显示的页码数量(可按需调整) $show_adjacent = 2; // 计算页码显示的起始与结束范围 $start_range = max(1, $pagina - $show_adjacent); $end_range = min($total_paginas, $pagina + $show_adjacent); // 起始范围大于1时,显示省略号 if ($start_range > 1) { echo '<li><span>...</span></li>'; } // 遍历输出范围内的页码 for ($i = $start_range; $i <= $end_range; $i++) { if ($i == $pagina) { echo '<li class="pageSelected">' . $i . '</li>'; } else { echo '<li><a href="?pagina=' . $i . '">' . $i . '</a></li>'; } } // 结束范围小于总页数时,显示省略号 if ($end_range < $total_paginas) { echo '<li><span>...</span></li>'; } // 下一页与末页按钮 if ($pagina != $total_paginas) { ?> <li><a href="?pagina=<?php echo $pagina + 1; ?>"><i class="fa-solid fa-forward"></i></a></li> <li><a href="?pagina=<?php echo $total_paginas; ?>"><i class="fa-solid fa-forward-fast"></i></a></li> <?php } ?> </ul> </div>
关键逻辑说明
- 范围控制:通过
$show_adjacent变量设置当前页前后显示的页码数量(示例设为2,可根据页面宽度调整),避免加载所有页码。 - 省略号适配:当起始页码大于1、结束页码小于总页数时,自动插入省略号,优化视觉体验。
- 合法性校验(可选):可以在获取
$pagina后添加校验,防止用户手动输入非法页码:
// 在获取$pagina的代码后添加 $pagina = (int)$pagina; if ($pagina < 1 || $pagina > $total_paginas) { $pagina = 1; }
内容的提问来源于stack exchange,提问作者daniel hernandez
相关产品推荐
相关产品推荐

