PHP分页如何仅显示前3页、后3页并省略中间多余页码
解决方法
你当前的问题是分页循环遍历了所有页码,只需要替换前端分页代码中for循环的部分即可实现带省略号的折叠效果,修改后的完整分页前端代码如下:
<ul class="pagination justify-content-end"> <li class="page-item <?php if($page <= 1){ echo 'disabled'; } ?>"> <a class="page-link" href="<?php if($page <= 1){ echo '#'; } else { echo "?page=" . $prev; } ?>">上一页</a> </li> <?php // 配置当前页前后展示的相邻页码数量 $adjacent = 2; // 总页数小于等于10页时直接全展示 if($totoalPages <= 10): for($i = 1; $i <= $totoalPages; $i++ ): ?> <li class="page-item <?php if($page == $i) {echo 'active'; } ?>"> <a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a> </li> <?php endfor; else: // 展示前3页 for($i = 1; $i <= 3; $i++): ?> <li class="page-item <?php if($page == $i) {echo 'active'; } ?>"> <a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a> </li> <?php endfor; // 当前页距离前三页较远时展示省略号 if($page > $adjacent + 3): ?> <li class="page-item disabled"><span class="page-link">...</span></li> <?php endif; // 展示当前页前后的相邻页码 for($i = max(4, $page - $adjacent); $i <= min($totoalPages - 2, $page + $adjacent); $i++): ?> <li class="page-item <?php if($page == $i) {echo 'active'; } ?>"> <a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a> </li> <?php endfor; // 当前页距离最后两页较远时展示省略号 if($page < $totoalPages - $adjacent - 2): ?> <li class="page-item disabled"><span class="page-link">...</span></li> <?php endif; // 展示最后2页 for($i = $totoalPages - 1; $i <= $totoalPages; $i++): ?> <li class="page-item <?php if($page == $i) {echo 'active'; } ?>"> <a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a> </li> <?php endfor; endif; ?> <li class="page-item <?php if($page >= $totoalPages) { echo 'disabled'; } ?>"> <a class="page-link" href="<?php if($page >= $totoalPages){ echo '#'; } else {echo "?page=". $next; } ?>">下一页</a> </li> </ul>
如果你需要调整展示的相邻页码数量,修改$adjacent参数的数值即可。
内容的提问来源于stack exchange,提问作者Backlink TR
相关产品推荐
相关产品推荐

