如何为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>'; } ?>
关键部分解释
- $showPagesAround变量:你可以根据需求调整这个数值,比如设为3,就会在当前页前后各显示3个页码,灵活控制分页栏的长度。
- 省略号判断逻辑:
- 当当前页比
$showPagesAround + 1大时,说明第一页和当前页之间有未显示的页码,插入省略号 - 当当前页比
$nbpages - $showPagesAround小时,说明当前页和最后一页之间有未显示的页码,插入省略号
- 当当前页比
- 页码范围控制:用
max(2, ...)避免重复显示第一页,用min($nbpages -1, ...)避免重复显示最后一页 - 当前页高亮:我加了
class="active"的判断,你可以根据自己的CSS样式调整类名,让当前页更显眼。
这样修改后,不管总页数有多少,分页栏都会保持简洁,同时清晰提示用户还有更多页码可以跳转~
内容的提问来源于stack exchange,提问作者Maciek M
相关产品推荐
相关产品推荐

