Laravelではページネーションを簡単に行う仕組みがあります。
公式(日本語)
しかしデフォルトではクラスなども決まっておりスタイルを当てたりしにくいので、
今回はこのページネーションのカスタマイズをする方法について取り上げます。
動作確認環境
PHP 8.1.2
Laravel 9.5.1
テンプレート設定
$ php artisan vendor:publish --tag=laravel-pagination
を実行することで resources/views/vendor/pagination/ にずらっとページネーション用のテンプレートファイルが生成されます。
デフォルトで利用されるテンプレートはLaravelのバージョンにより異なりますが、9.xの場合はtailwind.blade.phpがデフォルトになっています。
ここにテンプレートを追加します。(本記事ではcustom.blade.phpとします)
必要な変数やif文がわかるよう、bootstrapを利用しているならbootstrap、特になければdefaultのテンプレートをコピーして作成するとよいでしょう。
次に、作成したテンプレートファイルを利用するようにします。
App\Providers\AppServiceProvider のboot内でデフォルトのページネーションのviewを指定できます。
...
public function boot()
{
Paginator::defaultView('vendor.pagination.custom');
Paginator::defaultSimpleView('vendor.pagination.custom');
...
}
}
defaultView
が->paginate()
、defaultSimpleView
が->simplePaginate()
で呼び出すviewのデフォルトになります。
片方しか使わないのであればそちらの設定だけで大丈夫です。
なお、デフォルトではなく一部のページだけで別のテンプレートを利用したい場合はページネーションを呼び出す際に
{{ $users->links('vendor.pagination.custom') }}
というように個別で指定もできます。
これで呼び出しはできているので
あとは通常通りスタイルを当てて仕上げていくだけです。