如何在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
相关产品推荐
相关产品推荐

