📜  分页总是显示 5 页 - PHP (1)

📅  最后修改于: 2023-12-03 15:07:09.910000             🧑  作者: Mango

分页总是显示 5 页 - PHP

在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>
```

可以看到,输出了目标页前后的五个页码,以及省略号。此时用户可以方便地通过点击页码进行导航,同时界面简洁美观。