Laravelには協力なページネーションの機能があるので、カスタマイズしなくても大体のことは出来るのですが、
- 見た目を完全にオリジナルにしたい
- ページ数が省略される位置のロジックを特殊なものにしたい、一番端まで行くボタンを追加したい
などの仕様に対応するためには少し工夫が必要です。以下でどうやってやるか解説していきます。
見た目を完全にオリジナルにしたい
php artisan vendor:publish --tag=laravel-pagination
を実行して、Laravelのフレームワーク側が持っているレイアウトを/resources/views/vendor/pagination/
以下に持ってきて、レイアウトファイルをカスタマイズします。
カスタマイズしたページネーターを/resources/views/vendor/pagination/custom/pagenator.blade.php
とした場合は、
{{ $paginator->links('pagination::service/offer/offer-list') }}
という形で呼び出すことができます。
ページ数が省略される位置のロジックを特殊なものにしたい、一番端まで行くボタンを追加したい
ページの制御はLengthAwarePaginator::elements()
にかかれており、その実装はIlluminate\Pagination\UrlWindow
にかかれているので、これら2つをカスタマイズすればよいです。
UrlWindow::getSliderTooCloseToBeginning()
、UrlWindow::getSliderTooCloseToEnding()
、UrlWindow::getUrlSlider()
辺りが、ページネーションの最初の方に何件ページを表示して残りを…にするか、ページネーションの最後の方に何件ページを表示して残りを…にするか、ページネーションの中間のところで何件ページを出して残りを…にするか、というのが設定できるので、そこをカスタマイズすればよいです。
おまけ
ページネーションで移動するときはページのトップではなくて、一覧の最初の部分から始まって欲しいのでid指定をしたい、ということもあるでしょう。
そういうときはfragment()
を使えばよいです。
{{ $paginator->fragment('pagination-form')->links('pagination::custom/paginator') }}