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

如何在PHP分页中仅显示指定数量的页码而非全部页码?

实现指定数量页码的分页显示

嘿,我来帮你搞定这个分页只显示指定数量页码的需求!咱们先把原代码里缺失的部分补全,然后重点修改分页导航的逻辑——原来的代码会输出所有页码,现在咱们改成只显示当前页前后几个,再加上首尾页(必要时用省略号跳过中间的页码)。

完整的修改后代码

<?php
// 连接数据库并获取总记录数
$stmt = $pdo->prepare('SELECT * FROM locations');
$stmt->execute();
$count = $stmt->rowCount();

// 分页参数设置
$no_of_records_per_page = 100; // 每页显示的记录数
$total_pages = ceil($count / $no_of_records_per_page); // 总页数

// 获取当前页码,默认设为1
$pageno = isset($_GET['pageno']) ? (int)$_GET['pageno'] : 1;
// 确保当前页码在有效范围内
$pageno = max(1, min($pageno, $total_pages));

// 计算偏移量,用于查询当前页的数据
$offset = ($pageno - 1) * $no_of_records_per_page;
// 查询当前页的记录
$stmt = $pdo->prepare('SELECT * FROM locations LIMIT :offset, :limit');
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $no_of_records_per_page, PDO::PARAM_INT);
$stmt->execute();
$values = $stmt->fetchAll();
?>

<!-- 显示数据内容 -->
<div class="data-content">
    <?php foreach($values as $row): ?>
        <!-- 这里替换成你的数据展示逻辑 -->
        <p><?php echo htmlspecialchars($row['location_name']); ?></p>
    <?php endforeach; ?>
</div>

<!-- 分页导航 -->
<div class="pagination">
    <!-- 上一页按钮 -->
    <?php if($pageno > 1): ?>
        <a href="?pageno=1">首页</a>
        <a href="?pageno=<?php echo $pageno - 1; ?>">上一页</a>
    <?php endif; ?>

    <!-- 核心:显示指定数量的页码 -->
    <?php
    $adjacent = 2; // 要显示的当前页前后的页码数量
    $start_page = max(1, $pageno - $adjacent);
    $end_page = min($total_pages, $pageno + $adjacent);

    // 如果起始页大于1,显示第一页和省略号
    if($start_page > 1): ?>
        <a href="?pageno=1">1</a>
        <?php if($start_page > 2): ?>
            <span>...</span>
        <?php endif; ?>
    <?php endif; ?>

    <!-- 显示中间的页码 -->
    <?php for($i = $start_page; $i <= $end_page; $i++): ?>
        <a href="?pageno=<?php echo $i; ?>" <?php echo $i == $pageno ? 'class="active"' : ''; ?>>
            <?php echo $i; ?>
        </a>
    <?php endfor; ?>

    <!-- 如果结束页小于总页数,显示省略号和最后一页 -->
    <?php if($end_page < $total_pages): ?>
        <?php if($end_page < $total_pages - 1): ?>
            <span>...</span>
        <?php endif; ?>
        <a href="?pageno=<?php echo $total_pages; ?>"><?php echo $total_pages; ?></a>
    <?php endif; ?>

    <!-- 下一页按钮 -->
    <?php if($pageno < $total_pages): ?>
        <a href="?pageno=<?php echo $pageno + 1; ?>">下一页</a>
        <a href="?pageno=<?php echo $total_pages; ?>">尾页</a>
    <?php endif; ?>
</div>

关键逻辑解释

  • $adjacent 参数:这个变量控制当前页前后要显示的页码数量,比如设为2的话,当前页是5,就会显示3、4、5、6、7这几个页码,你可以根据需求调整这个数值。
  • 页码范围计算:$start_page 和 $end_page 确保显示的页码不会超出1到总页数的范围,避免出现无效页码。
  • 省略号处理:当起始页大于1时,显示第一页和省略号;当结束页小于总页数时,显示省略号和最后一页,避免页码过多导致排版混乱。
  • 当前页高亮:给当前页码加上active类,方便用户识别当前位置(你可以自定义这个类的CSS样式,比如改变背景色或字体颜色)。

这样修改后,不管总页数有多少,分页导航只会显示你指定数量的页码,既美观又实用!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:37:34