📅  最后修改于: 2023-12-03 15:07:09.910000             🧑  作者: Mango
在Web开发中,分页是非常常见的功能。但是在分页过程中显示页码的数量也是一个需要考虑的问题,过多或过少的页码显示都会影响用户的体验。
本文将介绍如何使用PHP来实现分页总是显示5页的功能。
我们可以先计算出当前页前后各两页的页码,然后根据当前页码和总页数来判断是否需要显示省略号,最后将页码列表输出给用户。
下面是一个分页类的实现代码示例,该类支持动态生成页码列表,可以方便地在页面中嵌入分页导航。
class Pagination {
private $total;
private $limit;
private $page;
public function __construct($total, $limit, $page) {
$this->total = $total;
$this->limit = $limit;
$this->page = $page;
}
public function getLinks() {
$total = ceil($this->total / $this->limit);
$start = max($this->page - 2, 1);
$end = min($this->page + 2, $total);
$links = array();
for ($i = $start; $i <= $end; $i++) {
$links[$i] = $i;
}
if ($start > 1) {
array_unshift($links, 1);
if ($start > 2) {
array_unshift($links, '...');
}
}
if ($end < $total) {
array_push($links, '...');
array_push($links, $total);
}
return $links;
}
}
```
在使用该类时,只需将总记录数、每页显示数和当前页数传递给构造函数,然后调用getLinks方法即可得到分页导航的页码列表。
## 使用示例
下面是一个使用示例,假设总记录数为100,每页显示10条数据,当前页为第7页。
````php
$pagination = new Pagination(100, 10, 7);
$links = $pagination->getLinks();
foreach ($links as $key => $value) {
echo $key == $pagination->page ? $value : '<a href="?page='.$value.'">'.$value.'</a>';
}
```
输出结果:
```
1 <a href="?page=2">2</a> <a href="?page=3">3</a> <a href="?page=4">4</a> <a href="?page=5">5</a> ... <a href="?page=7">7</a> <a href="?page=8">8</a> <a href="?page=9">9</a> <a href="?page=10">10</a> <a href="?page=11">11</a> ... <a href="?page=10">10</a>
```
可以看到,输出了目标页前后的五个页码,以及省略号。此时用户可以方便地通过点击页码进行导航,同时界面简洁美观。