laravel怎么实现自定义样式的分页功能

随着 laravel 框架的不断发展,现在越来越多的 web 项目都选择了它,当然也有很多开发者选择使用 laravel 开发自己的网站。在日常开发中,对于实现功能的实现,通常的做法是先寻找开源的库或者自己写组件,互联网上有很多前人的经验与总结,本篇文章就是其中之一,它会告诉你如何使用 laravel 自带的分页类来实现自定义样式的分页。

Laravel 自带的分页类

Laravel 框架自带了分页库,使用起来非常方便。在控制器中我们一般使用 paginate() 方法来查询数据并返回分页结果,而在 Blade 模板中我们可以直接使用 links() 方法来渲染分页链接,看下面的代码:

// 在控制器中查询数据并返回分页结果 $data = DB::table('table_name')->paginate(15);  // 在 Blade 模板中通过 links() 方法渲染分页链接 {{ $data->links() }}

这样代码就完成了分页查询的工作,并且将分页链接渲染到了页面上。但是这样的链接样式是默认的,如果想要更改样式,我们需要自定义视图。

自定义视图

我们先来了解下 links() 方法,我们可以在 Blade 模板中输出一下 {{ $data->links() }} 的值,得到的结果是这样的:

<ul class="pagination">     <li class="page-item disabled" aria-disabled="true" aria-label="&laquo; Previous">         <span class="page-link" aria-hidden="true">&lsaquo;</span>     </li>     <li class="page-item active" aria-current="page"><span class="page-link">1</span></li>     <li class="page-item"><a class="page-link" href="http://localhost?page=2">2</a></li>     <li class="page-item"><a class="page-link" href="http://localhost?page=3">3</a></li>     <li class="page-item"><a class="page-link" href="http://localhost?page=4">4</a></li>     <li class="page-item"><a class="page-link" href="http://localhost?page=5">5</a></li>     <li class="page-item">         <a class="page-link" href="http://localhost?page=2" rel="next" aria-label="Next &raquo;">&rsaquo;</a>     </li> </ul>

我们发现,links() 方法默认渲染的分页链接是一个无序列表,每一项都是一个独立的 li 元素,其中 active 类表示当前页码,disabled 类表示不可用的页码。如果我们想要自定义分页链接的样式,就需要在视图文件中覆盖 Laravel 默认的链接渲染。

在 Laravel 中,可以使用 php artisan make:view 命令来生成视图文件,如下:

php artisan make:view pagination

这个命令将在 Resources/views 目录下创建一个名为 pagination.blade.php 的文件。在该文件中写入如下代码:

@if ($paginator->hasPages())     <nav>         <ul class="pagination">             {{-- Previous Page Link --}}             @if ($paginator->onFirstPage())                 <li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">                     <span class="page-link" aria-hidden="true">&lsaquo;</span>                 </li>             @else                 <li class="page-item">                     <a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">&lsaquo;</a>                 </li>             @endif              {{-- Pagination Elements --}}             @foreach ($elements as $element)                 {{-- "Three Dots" Separator --}}                 @if (is_string($element))                     <li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>                 @endif                  {{-- Array Of Links --}}                 @if (is_array($element))                     @foreach ($element as $page => $url)                         @if ($page == $paginator->currentPage())                             <li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>                         @else                             <li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>                         @endif                     @endforeach                 @endif             @endforeach              {{-- Next Page Link --}}             @if ($paginator->hasMorePages())                 <li class="page-item">                     <a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">&rsaquo;</a>                 </li>             @else                 <li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">                     <span class="page-link" aria-hidden="true">&rsaquo;</span>                 </li>             @endif         </ul>     </nav> @endif

这段代码是 Laravel 默认的分页视图代码,我们可以将其拷贝到 pagination.blade.php 文件中,然后对其进行自定义修改。

自定义样式

自定义样式就看开发者自己的喜好了,比如我们可以将分页的链接修改为按钮样式:

<nav aria-label="Page navigation example">   <ul class="pagination justify-content-center">     @if ($paginator->onFirstPage())         <li class="page-item disabled"><span class="page-link">上一页</span></li>     @else         <li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}">上一页</a></li>     @endif      @foreach ($elements as $element)         @if (is_string($element))             <li class="page-item disabled"><span class="page-link">{{ $element }}</span></li>         @endif          @if (is_array($element))             @foreach ($element as $page => $url)                 @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="{{ $url }}">{{ $page }}</a></li>                 @endif             @endforeach         @endif     @endforeach      @if ($paginator->hasMorePages())         <li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}">下一页</a></li>     @else         <li class="page-item disabled"><span class="page-link">下一页</span></li>     @endif   </ul> </nav>

由于分页链接通常不会太多,并且不同页面的分页链接样式也可能不同,因此我们这里只提供了一种简单的修改方式,开发者可以根据自己的需求灵活调整。

总结

通过本文的介绍,我们了解到了 Laravel 框架自带的分页类是如何实现的,以及如何通过自定义视图来修改分页链接的样式。当然,这种自定义方式并不仅限于分页样式,开发者还可以将它应用到其他各种布局样式中。

在实际开发中,优秀的开发者总是能够发现框架的潜力并按照自己的需求进行优化,这就是成为一个优秀开发者所必须掌握的技术之一。希望本文能够对大家有所帮助,也希望大家能够对 Laravel 框架有更深入的了解和应用。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享