Laravel 5+ Bootstrap 4 分页器

本文介绍了如何在Laravel 5中结合Bootstrap 4自定义分页器的样式。内容包括如何导出并修改分页器模板,以及如何设置显示的页面数量。通过定义变量控制显示的页码范围,实现更灵活的分页效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近的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来达到我们需要的效果。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值