分页

Laravel的illuminate/database提供了方便的分页功能。

安装

composer require illuminate/pagination

使用

  1. public function index(Request $request)
  2. {
  3. $per_page = 10;
  4. $users = Db::table('user')->paginate($per_page, '*', 'page', $request->input('page'));
  5. return view('index/index', ['users' => $users]);
  6. }

分页器实例方法

方法 描述
$paginator->count() 获取当前页的数据总数
$paginator->currentPage() 获取当前页码
$paginator->firstItem() 获取结果集中第一个数据的编号
$paginator->getOptions() 获取分页器选项
$paginator->getUrlRange($start, $end) 创建指定页数范围的 URL
$paginator->hasPages() 是否有足够多的数据来创建多个页面
$paginator->hasMorePages() 是否有更多的页面可供展示
$paginator->items() 获取当前页的数据项
$paginator->lastItem() 获取结果集中最后一个数据的编号
$paginator->lastPage() 获取最后一页的页码(在 simplePaginate 中不可用)
$paginator->nextPageUrl() 获取下一页的 URL
$paginator->onFirstPage() 当前页是否为第一页
$paginator->perPage() 获取每一页显示的数量总数
$paginator->previousPageUrl() 获取上一页的 URL
$paginator->total() 获取结果集中的数据总数(在 simplePaginate 中不可用)
$paginator->url($page) 获取指定页的 URL
$paginator->getPageName() 获取用于储存页码的查询参数名
$paginator->setPageName($name) 设置用于储存页码的查询参数名

注意 不支持 $paginator->links() 方法

分页组件

webman中无法使用 $paginator->links() 方法渲染分页按钮,不过我们可以使用其他组件来渲染,例如 jasongrimes/php-paginator

安装 composer require "jasongrimes/paginator:~1.0"

后端

  1. <?php
  2. namespace app\controller;
  3. use JasonGrimes\Paginator;
  4. use support\Request;
  5. use support\Db;
  6. class User
  7. {
  8. public function get(Request $request)
  9. {
  10. $per_page = 10;
  11. $current_page = $request->input('page', 1);
  12. $users = Db::table('user')->paginate($per_page, '*', 'page', $current_page);
  13. $paginator = new Paginator($users->total(), $per_page, $current_page, '/user/get?page=(:num)');
  14. return view('user/get', ['users' => $users, 'paginator' => $paginator]);
  15. }
  16. }

模板(php原生) 新建模版 app/view/user/get.html

  1. <html>
  2. <head>
  3. <!-- 内置支持 Bootstrap 分页样式 -->
  4. <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  5. </head>
  6. <body>
  7. <?= $paginator;?>
  8. </body>
  9. </html>

模板(twig) 新建模版 app/view/user/get.html

  1. <html>
  2. <head>
  3. <!-- 内置支持 Bootstrap 分页样式 -->
  4. <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  5. </head>
  6. <body>
  7. {% autoescape false %}
  8. {{paginator}}
  9. {% endautoescape %}
  10. </body>
  11. </html>

模板(blade) 新建模版 app/view/user/get.blade.php

  1. <html>
  2. <head>
  3. <!-- 内置支持 Bootstrap 分页样式 -->
  4. <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  5. </head>
  6. <body>
  7. {!! $paginator !!}
  8. </body>
  9. </html>

模板(thinkphp) 新建模版 app/view/user/get.blade.php

  1. <html>
  2. <head>
  3. <!-- 内置支持 Bootstrap 分页样式 -->
  4. <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  5. </head>
  6. <body>
  7. <?=$paginator?>
  8. </body>
  9. </html>

效果如下: 分页 - 图1