## 分页 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; ?> ~~~