Laravel 5+ Bootstrap 4 分页器

版权声明:尊重原创喔,转载请注明 https://blog.csdn.net/lgyaxx/article/details/78353987

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

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

完成之后,我们会发现resources/views/vendor/pagination文件夹下多出了几个模板。Laravel 5.5版本前,默认的分页器模板为default.blade.php而从5.6版本开始,默认模板名称已经调整为bootstrap-4.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来达到我们需要的效果。

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

猜你喜欢

转载自blog.csdn.net/lgyaxx/article/details/78353987
今日推荐