Laravel 手动分页实现

Laravel 手动分页实现

基于5.2版本

在开发过程中有这么一种情况,你请求Java api获取信息,由于信息较多,需要分页显示。Laravel官方提供了一个简单的方式paginate($perPage),但是这种方法只适用model、查询构建器。 
今天说下 给定一个数组如何实现 和paginate方法一样的效果。

查看paginate方法源码

#vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480

public function paginate($perPage = null, $columns = [‘*‘], $pageName = ‘page‘, $page = null)
{
        $query = $this->toBase();

        $total = $query->getCountForPagination();

        $this->forPage(
            $page = $page ?: Paginator::resolveCurrentPage($pageName),
            $perPage = $perPage ?: $this->model->getPerPage()
        );

        return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, [
            ‘path‘ => Paginator::resolveCurrentPath(),
            ‘pageName‘ => $pageName,
        ]);
}

从上面就可以看出,分页的关键就在于LengthAwarePaginator。

LengthAwarePaginator的构造方法。

public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
{
        foreach ($options as $key => $value) {
            $this->{$key} = $value;
        }

        $this->total = $total;
        $this->perPage = $perPage;
        $this->lastPage = (int) ceil($total / $perPage);
        $this->path = $this->path != ‘/‘ ? rtrim($this->path, ‘/‘) : $this->path;
        $this->currentPage = $this->setCurrentPage($currentPage, $this->lastPage);
        $this->items = $items instanceof Collection ? $items : Collection::make($items);
}

其实已经很明白了,假如要分页的数组为

[
    [‘username‘=>‘zhangsan‘, ‘age‘=>26],
    [‘username‘=>‘lisi‘, ‘age‘=>23],
    [‘username‘=>‘wangwu‘, ‘age‘=>62],
    [‘username‘=>‘zhaoliu‘, ‘age‘=>46],
    [‘username‘=>‘wangmazi‘, ‘age‘=>25],
    [‘username‘=>‘lanzi‘, ‘age‘=>24],
    [‘username‘=>‘pangzi‘, ‘age‘=>21],
]

共7条数据,每页显示3条,共3页

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Http\Request;
# 仅做演示 #
function userList(Request $request) {
    $users = [
        [‘username‘=>‘zhangsan‘, ‘age‘=>26],
        [‘username‘=>‘lisi‘, ‘age‘=>23],
        [‘username‘=>‘wangwu‘, ‘age‘=>62],
        [‘username‘=>‘zhaoliu‘, ‘age‘=>46],
        [‘username‘=>‘wangmazi‘, ‘age‘=>25],
        [‘username‘=>‘lanzi‘, ‘age‘=>24],
        [‘username‘=>‘pangzi‘, ‘age‘=>21]
    ];

    $perPage = 3;
    if ($request->has(‘page‘)) {
            $current_page = $request->input(‘page‘);
            $current_page = $current_page <= 0 ? 1 :$current_page;
    } else {
            $current_page = 1;
    }

    $item = array_slice($users, ($current_page-1)*$perPage, $perPage); //注释1
    $total = count($users);

    $paginator =new LengthAwarePaginator($item, $total, $perPage, $currentPage, [
            ‘path‘ => Paginator::resolveCurrentPath(),  //注释2
            ‘pageName‘ => ‘page‘,
    ]);

    $userlist = $paginator->toArray()[‘data‘];

    return view(‘userlist‘, compact(‘userlist‘, ‘paginator‘));
}

上面的代码中的重点是$item,如果不做注释1处理,得出的是所有7条数据。

注释2处就是设定个要分页的url地址。也可以手动通过 $paginator ->setPath(‘路径’) 设置。

页面中的分页连接也是同样的调用方式 {{ $paginator->render() }}

好了,基本就是这样,有纰漏的地方欢迎指正!

转:https://blog.csdn.net/hxx_yang/article/details/51753134

原文地址:https://www.cnblogs.com/fps2tao/p/9245673.html

时间: 2024-07-31 02:06:10

Laravel 手动分页实现的相关文章

laravel 手动分页 我分的是数组

namespace App\Http\Controllers\Admin; use Illuminate\Http\Request;use App\Http\Controllers\Controller;use DB;use Illuminate\Pagination\LengthAwarePaginator;use Illuminate\Support\Collection; class AdnamesController extends Controller{ public function

Laravel手动分页的方法

use Illuminate\Pagination\LengthAwarePaginator; public function index(Request $request){ $list =[...]; //当前页数 默认1 $page = $request->page ?: 1; //每页的条数 $perPage = 10; //计算每页分页的初始位置 $offset = ($page * $perPage) - $perPage; //实例化LengthAwarePaginator类,并传

这个laravel手动分页很好用

mark一下 use Illuminate\Pagination\LengthAwarePaginator; public function index(Request $request){ $list =[...]; //当前页数 默认1 $page = $request->page ?: 1; //每页的条数 $perPage = 10; //计算每页分页的初始位置 $offset = ($page * $perPage) - $perPage; //实例化LengthAwarePagina

关于laravel 得手动分页问题

一般得分页,我们只需要使用paginate方法,就可以简单得搞定.但是遇到数组得组合情况呢?这个时候,就需要我们使用自定义分页了.首先我们看下laravel得分页方法源码: #vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480 public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page =

paginate分页及手动分页

Paginate分页 //ORM 默认分页 $students=Student::paginate(5); //显示 $students->render(); // 使用简单模板 - 只有 "上一页" 或 "下一页" 链接 Student::where('cars', 2)->simplePaginate(15); // 手动分页 $item //手动查询到的数据 $total //所有符合条件的数据总数量 $perPage //每个页面,数据显示的条数

纯js手动分页

昨天让做个页面,后台提供所有数据,没有做好分页,需要前端js手动分页. 我参考了 http://www.cnblogs.com/jiechn/p/4095029.html 做了些许改动让分页效果更加完善. 最终效果图 js代码 /** * 分页函数 * pno--页数 * psize--每页显示记录数 * 分页部分是从真实数据行开始,因而存在加减某个常数,以确定真正的记录数 * 纯js分页实质是数据行全部加载,通过是否显示属性完成分页功能 **/ function goPage(pno){ va

laravel自定义分页

laravel框架自带有分页处理类,并且与ORM模型结合,我们可以非常方便的使用这个分页,它提供了方便与给了一些扩展麻烦. 框架自带有三套分页显示模板,具体的可以修改\app\config\view.php配置文件中的'pagination' => 'pagination::slider-3'. 在这个配置中'pagination::slider-3'前面的pagination是指定要调用的分页处理类名,后台是给这个分页指定模板文件名,这几个模板都放在框架内部\vendor\laravel\fr

114.实现手动分页效果

分页 在网站的开发当中,我们常常需要将各种列表中的数据分页显示,想要实现分页的效果,就可以通过django.core.Paginator.Paginator和django.core.Paginator.Page来实现. 1. 比如,将Paginator_pageAPP中表article中的range(1,100)的数据分页显示,每页显示10条数据,可以实现手动分页的效果. (1)首先在models.py文件中定义模型Article,示例代码如下: from django.db import mo

laravel:数组手动分页 --paginate()方法

use Illuminate\Pagination\LengthAwarePaginator;use Illuminate\Pagination\Paginator; $perPage = 10; //每页显示数量if ($request->has('page')) { $current_page = $request->input('page'); $current_page = $current_page <= 0 ? 1 :$current_page;} else { $curre