Laravel 5+ Bootstrap 4 分页器

来源:互联网 发布:分析淘宝网的特点 编辑:程序博客网 时间:2024/06/03 21:30

最近的project里,发现需要修改Laravel自带的Bootstrap 4分页器。要使用自带的BS4分页,我们需要将分页器模板导出到resources/views/vendor文件夹下:

$ php artisan vendor:publish --tag=laravel-pagination

完成之后,我们会发现resources/views/vendor/pagination文件夹下多出了几个模板。我们可以把带有bootstrap 4名称的blade模板中的代码拷贝至default.blade.php里,这样就不需要我们在调用分页器的时候,手动添加模板名,例如:

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

Laravel文档中没有给出任何能够修改所显示的页面数量的办法,所以我们需要自己动手来实现:

{{-- Author: Eagle Luo --}}@if ($paginator->hasPages())    <ul class="pagination pagination-sm justify-content-center">        {{-- Previous Page Link and page 1 --}}        @if ($paginator->onFirstPage())            <li class="page-item disabled" tabindex="-1"><span class="page-link">&laquo; 前一页</span></li>            <li class="page-item active"><span class="page-link">1</span></li>        @else            <li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo; 前一页</a></li>            <li class="page-item"><a class="page-link" href="{{ $paginator->url(1) }}">1</a></li>        @endif        @php            $halfTotal      = intval($paginator->lastPage() / 2);            $limit          = 6;            $halfLimit      = intval($limit / 2);            $pageRightBound = $paginator->currentPage() + $halfLimit;            $pageLeftBound  = $paginator->currentPage() - $halfLimit;        @endphp        @if ($paginator->lastPage() <= $limit)            @for ($page = 2; $page <= $paginator->lastPage(); $page++)                @if ($page == $paginator->currentPage())                    <li class="page-item active"><span class="page-link">{{ $page }}</span></li>                @else                    <li class="page-item"><a class="page-link" href="{{ $paginator->url($page) }}">{{ $page }}</a></li>                @endif            @endfor        @else            {{-- When there are less than $halfLimit pages to show on left or right of the current page  --}}            @php                if ($pageRightBound >= $paginator->lastPage() - 1) {                    $pageLeftBound = $paginator->lastPage() - $limit;                    $pageRightBound = $paginator->lastPage() - 1;                }                if ($pageLeftBound <= 2) {                    $pageRightBound = 1 + $limit;                    $pageLeftBound = 2;                }            @endphp            {{-- Show three dot separator on the left --}}            @if ($pageLeftBound > 2)                <li class="page-item disabled" tabindex="-1"><span class="page-link">...</span></li>            @endif            @for ($page = $pageLeftBound; $page <= $pageRightBound; $page++)                @if ($page == $paginator->currentPage())                    <li class="page-item active"><span class="page-link">{{ $page }}</span></li>                @else                    <li class="page-item"><a class="page-link" href="{{ $paginator->url($page) }}">{{ $page }}</a></li>                @endif            @endfor            {{-- Show three dot separator on the right --}}            @if ($pageRightBound < $paginator->lastPage() - 1)                <li class="page-item disabled" tabindex="-1"><span class="page-link">...</span></li>            @endif            {{-- Display the last page --}}            @if ($paginator->currentPage() == $paginator->lastPage())                <li class="page-item active"><span class="page-link">{{ $paginator->lastPage() }}</span></li>            @else                <li class="page-item"><a class="page-link" href="{{ $paginator->url($paginator->lastPage()) }}">{{ $paginator->lastPage() }}</a></li>            @endif        @endif        {{-- Pagination Elements --}}        {{-- Next Page Link --}}        @if ($paginator->hasMorePages())            <li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">下一页 &raquo;</a></li>        @else            <li class="page-item disabled" tabindex="-1"><span class="page-link">下一页 &raquo;</span></li>        @endif    </ul>@endif

注意,我们定义了$limit这个变量为当前页码之前和之后最多能显示的页数之和,例如当前是第7页,那么分页器将显示:
Bootstrap 4 + Laravel 5 paginator

我们可以更改$limit来达到我们需要的效果。

如果有更好的方法,欢迎指出及指正。

原创粉丝点击