首页 > 解决方案 > 如何在 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 实现这个来分页?

标签: phpmysqllaravelpagination

解决方案


在控制器返回视图中

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">&lsaquo;</span>
                </li>
            @else
                <li>
                    <a 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="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')">&rsaquo;</a>
                </li>
            @else
                <li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
                    <span aria-hidden="true">&rsaquo;</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


推荐阅读