版权声明:尊重原创喔,转载请注明 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">« 前一页</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">« 前一页</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">下一页 »</a></li>
@else
<li class="page-item disabled" tabindex="-1"><span class="page-link">下一页 »</span></li>
@endif
</ul>
@endif
注意,我们定义了$limit
这个变量为当前页码之前和之后最多能显示的页数之和,例如当前是第7页,那么分页器将显示:
我们可以更改$limit
来达到我们需要的效果。
如果有更好的方法,欢迎指出及指正。