## 分页
MixPHP 的分页类采用的一种非常灵活的设计方式,分页的构建都由视图层完成,可以构建任意结构的分页式样。
| 类 | 调用 |
| --- | --- |
| mix\http\Pagination | new Pagination([配置]); |
>[info] 配置参数放在配置文件 objects 字段,再使用 app()->createObject($name) 实例化对象是更好的方式。
## 模型范例
MixPHP 建议用户在模型中使用分页类,因为在模型内更加方便获取分页数据,分页数据可随分页对象由控制器传递至视图。
~~~
// 模型内的方法
public function getPagination($page)
{
return new Pagination([
// 数据结果集
'items' => $data,
// 数据总行数
'totalItems' => 987,
// 当前页,值 >= 1
'currentPage' => $page,
// 每页显示数量
'perPage' => 10,
// 固定最小最大页码
'fixedMinMax' => true,
// 数字页码展示数量
'numberLinks' => 5,
]);
}
~~~
## 视图范例
我们设计了三个常用的分页式样,使用 bootstrap 的用户可直接复制代码使用,使用其他前端框架的用户只需修改相关的 HTML 即可。
### 1. 带上下页且固定最小最大页
![](https://box.kancloud.cn/4bf0410f76ea79a74ffd0b04dbcef5f2_502x83.png)
~~~
<?php if ($pagination->display()): ?>
<nav aria-label="Page navigation">
<ul class="pagination">
<?php if ($pagination->hasPrev()): ?>
<li><a href="/?page=<?= $pagination->prev(); ?>">上一页</a></li>
<?php else: ?>
<li class="disabled"><span>上一页</span></a></li>
<?php endif; ?>
<?php foreach ($pagination->numbers() as $number): ?>
<?php if ($number->text == 'ellipsis'): ?>
<li class="disabled"><span>...</span></li>
<?php else: ?>
<li <?= $number->selected ? 'class="active"' : ''; ?>><a href="/?page=<?= $number->text; ?>"><?= $number->text; ?></a></li>
<?php endif; ?>
<?php endforeach; ?>
<?php if ($pagination->hasNext()): ?>
<li><a href="/?page=<?= $pagination->next(); ?>">下一页</a></li>
<?php else: ?>
<li class="disabled"><span>下一页</span></a></li>
<?php endif; ?>
</ul>
</nav>
<p><?php echo "当前第 ", $pagination->currentPage, " 页,共 ", $pagination->totalPages, " 页"; ?></p>
<?php endif; ?>
~~~
### 2. 纯数字固定最小最大页
![](https://box.kancloud.cn/4f77c8872cb512688dff1a5172a948bc_366x78.png)
~~~
<?php if ($pagination->display()): ?>
<nav aria-label="Page navigation">
<ul class="pagination">
<?php foreach ($pagination->numbers() as $number): ?>
<?php if ($number->text == 'ellipsis'): ?>
<li class="disabled"><span>...</span></li>
<?php else: ?>
<li <?= $number->selected ? 'class="active"' : ''; ?>><a href="/?page=<?= $number->text; ?>"><?= $number->text; ?></a></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
</nav>
<p><?php echo "当前第 ", $pagination->currentPage, " 页,共 ", $pagination->totalPages, " 页"; ?></p>
<?php endif; ?>
~~~
### 3. 带首尾页上下页
![](https://box.kancloud.cn/93b3692f9eb429a1cec28db9af64ce92_453x81.png)
~~~
<?php if ($pagination->display()): ?>
<nav aria-label="Page navigation">
<ul class="pagination">
<?php if ($pagination->hasFirst()): ?>
<li><a href="/">首页</a></li>
<?php else: ?>
<li class="disabled"><span>首页</span></a></li>
<?php endif; ?>
<?php if ($pagination->hasPrev()): ?>
<li><a href="/?page=<?= $pagination->prev(); ?>">上一页</a></li>
<?php else: ?>
<li class="disabled"><span>上一页</span></a></li>
<?php endif; ?>
<?php foreach ($pagination->numbers() as $number): ?>
<li <?= $number->selected ? 'class="active"' : ''; ?>><a href="/?page=<?= $number->text; ?>"><?= $number->text; ?></a></li>
<?php endforeach; ?>
<?php if ($pagination->hasNext()): ?>
<li><a href="/?page=<?= $pagination->next(); ?>">下一页</a></li>
<?php else: ?>
<li class="disabled"><span>下一页</span></a></li>
<?php endif; ?>
<?php if ($pagination->hasLast()): ?>
<li><a href="/?page=<?= $pagination->totalPages; ?>">尾页</a></li>
<?php else: ?>
<li class="disabled"><span>尾页</span></a></li>
<?php endif; ?>
</ul>
</nav>
<p><?php echo "当前第 ", $pagination->currentPage, " 页,共 ", $pagination->totalPages, " 页"; ?></p>
<?php endif; ?>
~~~
- 欢迎使用 MixPHP
- 安装说明
- 常规安装
- 只安装命令行
- Apache/PHP-FPM安装
- 开发与调试
- 开发注意事项
- 调试与错误
- 基础架构
- 目录结构
- 目录设计
- URL访问
- 命名空间
- 自动加载
- 入口文件
- 框架核心
- Application
- 配置
- 对象
- 组件
- 门面
- 系统服务
- 中间件
- 验证器
- 验证器定义
- 验证规则
- 静态调用
- 模型
- 日志
- 命令行
- 简介
- 命令行开发常识
- 创建命令
- 执行与选项
- 控制台程序
- 守护程序
- HTTP 服务
- 简介
- 服务器
- 路由
- 请求
- 响应
- 控制器
- 视图
- Token
- Session
- Cookie
- 文件上传
- 图片处理
- 分页
- 验证码
- WebSocket 服务
- 简介
- 回调函数
- 消息处理器
- 客户端测试
- nginx代理
- 60s无消息断线
- 多进程
- ProcessPoolTaskExecutor
- 流水线模式
- 推送模式
- 在 Supervisor 中使用
- 协程
- 简介
- 如何开启协程
- HTTP 协程开发
- 命令行协程开发
- 客户端
- MySQL
- PDO
- PDOPersistent
- PDOMasterSlave
- PDOCoroutine
- Redis
- Redis
- RedisPersistent
- RedisCoroutine
- 外部工具库
- 简介
- think-orm
- psr-log
- 安全建议
- 常见问题
- 启动多个 HTTP 服务器
- 连接多个数据库
- 如何设置跨域
- mix-httpd service stop 无效
- No such file or directory
- 错误级别配置不生效
- 推进计划
- 文档历史