LoginSignup
3
3

More than 3 years have passed since last update.

Laravelでオリジナルなページネーションを作る

Posted at

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') }}
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3