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

PHP分页页码过多,如何修改代码限制分页栏显示页码数?

优化PHP分页显示:限制页码数量并添加省略号

我明白你的问题——当数据量很大时,全量显示所有页码会让分页栏变得冗长且不友好。我们可以通过添加逻辑来限制显示的页码数量,只展示当前页附近的页码、首尾页,并用省略号代替中间的冗余页码。

下面是修改后的分页链接代码,完全适配你现有的业务逻辑:

<?php
$result_db = mysqli_query($conn,"SELECT COUNT(id) FROM acxhuzur_dernek.video");
$row_db = mysqli_fetch_row($result_db);
$total_records = $row_db[0];
$total_pages = ceil($total_records / $limit);
$adjacent = 2; // 可调整:控制当前页前后显示的页码数量

$pagLink .= '
<div class="col-12 margin-100px-top md-margin-50px-top wow" style="visibility: visible; animation-name: fadeInUp;">
    <div class="pagination text-small text-uppercase text-extra-dark-gray text-center">
        <ul class="mx-auto">';

// 上一页按钮逻辑
if ($page > 1) {
    $pagLink .= '<li><a href="gallery_video?page='.($page-1).'">Prev</a></li>';
} else {
    $pagLink .= '<li class="disabled"><span>Prev</span></li>';
}

// 核心页码显示逻辑
if ($total_pages <= ($adjacent * 2 + 3)) {
    // 总页数较少时,直接显示所有页码
    for ($i=1; $i<=$total_pages; $i++) {
        $activeClass = ($page == $i) ? 'class="active"' : '';
        $pagLink .= '<li '.$activeClass.'><a href="gallery_video?page='.$i.'">'.$i.'</a></li>';
    }
} else {
    // 固定显示第一页
    $pagLink .= '<li><a href="gallery_video?page=1">1</a></li>';
    
    // 当前页离第一页较远时,显示省略号
    if ($page - $adjacent > 2) {
        $pagLink .= '<li class="disabled"><span>..</span></li>';
    }
    
    // 显示当前页前后的相邻页码
    $startPage = max(2, $page - $adjacent);
    $endPage = min($total_pages - 1, $page + $adjacent);
    for ($i=$startPage; $i<=$endPage; $i++) {
        $activeClass = ($page == $i) ? 'class="active"' : '';
        $pagLink .= '<li '.$activeClass.'><a href="gallery_video?page='.$i.'">'.$i.'</a></li>';
    }
    
    // 当前页离最后一页较远时,显示省略号
    if ($page + $adjacent < $total_pages - 1) {
        $pagLink .= '<li class="disabled"><span>..</span></li>';
    }
    
    // 固定显示最后一页
    $pagLink .= '<li><a href="gallery_video?page='.$total_pages.'">'.$total_pages.'</a></li>';
}

// 下一页按钮逻辑
if ($page < $total_pages) {
    $pagLink .= '<li><a href="gallery_video?page='.($page+1).'">Next</a></li>';
} else {
    $pagLink .= '<li class="disabled"><span>Next</span></li>';
}

echo $pagLink . '</ul></div></div>';
?>

关键逻辑说明

  • $adjacent = 2:这个变量决定了当前页前后各显示多少个页码,你可以根据需求调整数值(比如改成1,就只显示当前页前后1个页码)。
  • 禁用状态处理:当处于第一页时,"Prev"按钮会添加disabled类并变成不可点击的文本;处于最后一页时,"Next"按钮同理,提升用户体验。
  • 分页场景适配:
    • 总页数较少时(比如少于7页),直接显示所有页码,避免多余的省略号。
    • 总页数较多时,固定显示首尾页,用省略号代替中间的大量页码,只保留当前页附近的可点击页码,让分页栏保持简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:12:52