php - 如何在 laravel 8 中自定义默认分页?
问题描述
我正在构建一个应用程序,其中某些页面需要分页。我已经为我的应用程序的分页做了设计。但是我如何将它与 laravel 分页一起使用?
我这样做是为了在控制器中分页
$products= Products::paginate(9);
在我的刀片中,这是我想要的分页 HTML
<div class="row pt-3 pb-5">
<div class="col-12 d-flex justify-content-end">
<div class="pagination-btn-box">
<button class="active-pagination-btn">1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
<button>...</button>
<button>Next</button>
</div>
</div>
</div>
现在,我怎样才能用 laravel 实现这个来分页?
解决方案
在控制器返回视图中
return view('blade file name',compact('products'))
在刀片中,如下所示
<div class="container">
@foreach ($products as $product)
{{ $product->fieldname}}
@endforeach
</div>
{{ $products->links() }}
$products->links()
将生成默认分页。
如果要自定义分页模板,请运行以下命令
php artisan vendor:publish --tag=laravel-pagination
这将在视图/供应商/分页中生成文件夹
default.blad.php
如下所示
@if ($paginator->hasPages())
<nav>
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
<span aria-hidden="true">‹</span>
</li>
@else
<li>
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
</li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li>
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
</li>
@else
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
<span aria-hidden="true">›</span>
</li>
@endif
</ul>
</nav>
@endif
不过,如果您想使用自己的分页视图,那么它是可能的。首先您需要在服务提供者中注册您的自定义视图
<?php
namespace App\Providers;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//defaultStringLength changed to 191 to support mysql below 5.7
Schema::defaultStringLength(191);
Paginator::defaultView('custom-pagination');
Paginator::defaultSimpleView('simple-pagination');
}
}
所以在我的示例中,我创建了两个刀片模板custom-pagination.blade.php
,称为simple-pagination.blade.php
参考:https ://laravel.com/docs/8.x/pagination#displaying-pagination-results
推荐阅读
- javascript - 使用服务器发送的事件在客户端之间共享数据
- python - PyLepton_capture 得到 [Errno 90] 消息太长
- python - 在 keras 中共享层块的权重
- python - 在绘图中将计数百分比添加到堆积条形图
- python - CoreAPI 到 OpenAPI 模式生成转换(Django REST 框架)
- scala - 对于可选的集合迭代和产量的理解
- tensorflow - 如何在 TF2 中动态更新批范数动量?
- sql - Postgres 聚合
- amazon-web-services - 如何在 Cloudformation 模板上为 AWS EC2 实例设置 MemorySize?
- docker - 泊坞窗图像中的重复层