Laravel5.6 自定义分页组件

Laravel分页非常简单,只需要在查询中调用paginate()方法即可.

传递给 paginate 的唯一参数就是你每页想要显示的数目,这里我们指定每页显示 5条记录

<?php

namespace App\Http\Controllers;

use App\Article;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    public function show()
    {
    	$data['new'] = Article::orderByDesc('id')->paginate(5);

    	return view('index.index')->withData($data);
    }
}

注:目前,使用 groupBy的分页操作不能被Laravel有效执行,如果你需要在分页结果中使用 groupBy,推荐你手动查询数据库然后创建分页器。

简单分页

如果你只需要在分页视图中简单的显示“下一页”和“上一页”链接,可以使用 simplePaginate 方法来执行一个更加高效的查询。

$articles = Article::simplePaginate(5);

自定义分页方法一:手动创建分页器

有时候你可能想要通过传递数组数据来手动创建分页实例,你可以基于自己的需求通过创建 Illuminate\Pagination\Paginator 或 Illuminate\Pagination\LengthAwarePaginator 实例来实现。

Paginator 类不需要知道结果集中数据项的总数;不过,正因如此,该类也没有提供获取最后一页索引的方法。LengthAwarePaginator 接收参数和 Paginator 几乎一样,唯一不同在于它要求传入结果集的总数。

换句话说,Paginator 对应 simplePaginate 方法,而 LengthAwarePaginator 对应 paginate 方法。

注:当手动创建分页器实例的时候,应该手动对传递到分页器的结果集进行“切片”,如果你不确定怎么做,查看 PHP 函数 array_slice。

目前还没试过这个方法先不探究....

自定义分页方法二:自定义分页模板

我们可以通过links方法传递一个模板进去

{{ $paginator->links('view.name') }}

我们通过分页器的提供的实例方法来实现我们的分页功能

$paginator->count()

$paginator->currentPage()

$paginator->firstItem()

$paginator->hasMorePages()

$paginator->lastItem()

$paginator->lastPage() (使用simplePaginate 时无效)

$paginator->nextPageUrl()

$paginator->perPage()

$paginator->previousPageUrl()

$paginator->total() (使用simplePaginate 时无效)

$paginator->url($page)

完善后的代码

<nav class="pagination" style="display: block;">
        <ul>
          @if($paginator->currentPage() > 1)
          <li class="prev-page"><a href="{{ $paginator->previousPageUrl() }}">上一页</a></li>
          @endif
          @for($i=1;$i<=$paginator->lastPage();$i++)
            @if($paginator->currentPage() == $i)
              <li class="active"><span>{{ $i }}</span></li>
            @else
              <li><a href="{{  $paginator->url($i) }}">{{ $i }}</a></li>
            @endif
          @endfor
          @if($paginator->hasMorePages())
            <li class="next-page"><a href="{{ $paginator->nextPageUrl() }}">下一页</a></li>
          @endif
          <li><span> {{ $paginator->lastPage() }} </span></li>
        </ul>
      </nav>

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容