【Laravel】『前へ・次へ』のみの、シンプルなページネーションを実装する(simplePaginate)
| 更新: 2024/09/25 | 2889文字
今回はフレームワークLaravelで、『前へ・次へ』のみの、シンプルなページネーションを作ってみます。Laravelにはページネーション出力用のメソッドも搭載されているとのこと。さっそく試してみましょう。
目次
以前行った内容~LaravelのsimplePaginateは未使用
WP rest-apiを取ってくるアプリケーション
以前当サイトで扱った内容で、WordPressのrest-apiを取ってきてLaravelで表示するといったものでしたが、これはページネーションのメソッドを使っておらず、jsで対応しました。単純な表示なら大丈夫かなという気はしますが、管理人的には搭載メソッドも押さえておきたいところです。
(過去記事)rest-apiを取ってきて記事一覧作成する方法~blade内でのループや条件分岐
https://division-web.atelier-ss-agency.com/10027/how-to-make-wp-rest-api-archive-with-laravel/
データベースからユーザー一覧みたいなのを取ってくる(これにページネーションつけたい)
こちらも以前行った内容で、DBクラスでSQLiteデータベースを操作しました。一覧表示のときはずらーっと出てくるので、件数が増えたときはページネーションがあると使い勝手が良くなります。
(過去記事)DBクラスを使って、SQLiteデータベースのCRUD操作(Create、Read、Update、Delete)をやってみる
https://division-web.atelier-ss-agency.com/10473/laravel-db-class-crud/
Laravelのページネーションメソッドについて
英語版・日本語版ドキュメントを両方見てみました。『前へ・次へ』のタイプはsimplePaginate、『1・2・3~』みたいなタイプはpaginateで実装できるとのことです。
また、注意点として『デフォルトではTailwind CSSと互換性がある』ということで、Tailwindを使ってない場合は表示がおかしくなる(ページネーションの矢印がやたらデカい)みたいな例が確認できました。
Database: Pagination
https://laravel.com/docs/10.x/pagination
(日本語翻訳版)Laravelページネーション
https://readouble.com/laravel/10.x/ja/pagination.html
LaravelのsimplePaginate使い方
データベースから取ってくるページでsimplePaginateを使ってみます。事前準備として〇〇/public/dbtest01でindexのメソッド使うようにルーティング設定がしてあります。また、コマンドで追加のコントローラー(SqlController)も用意しています。
インストールディレクトリ/app/Http/Controllers/SqlController.php
コントローラーのindexメソッドです。idがある場合はそのレコードを表示して、無い場合は一覧を出すようになっています。この一覧のときにsimplePaginateを使ってみました。かっこ内の3は、1ページ3件という形になります。
DB::tableという書き方になっていますが、これをselectを使って以下のように書いた場合は・・・
Call to a member function simplePaginate() on arrayのエラーになります。
インストールディレクトリ/resources/views/dbtest01/index.blade.php
コントローラーに書いたあとは、対応するビューファイルに『{{$items->links()}}』を追加しました。Tailwindを使わない場合とかは、divでくくってclassつけといたほうが、レイアウト調整しやすいかなと思います。
ちなみに、ページネーションのaタグには 『relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 leading-5 rounded-md hover:text-gray-500 focus:outline-none focus:ring ring-gray-300 focus:border-blue-300 active:bg-gray-100 active:text-gray-700 transition ease-in-out duration-150』のようなクラスが出力されました。
px-4みたいな表記でTailwind用とわかります(padding,x軸)。
simplePaginate表示例とpaginateとの違い
そんなわけで『前・次』形式のシンプルページネーションがサックリ実装されました。レコードが多くない場合はこれでなんとかなります。多い場合はpaginateメソッドを使っても良いです。
paginateメソッドの場合は『1・2・3~』みたいな形式になります。管理人はビュー側で『{{$items->links('pagination::bootstrap-4')}}』にして、Tailwindを解除・bootstrapにすることにより、やたらデカい矢印を回避しました。
あとがき・まとめ
- LaravelのページネーションにはsimplePaginateとpaginateがある
- 『前・次』形式のシンプルなものはsimplePaginateで対応できる
- Tailwind互換になっている点は注意
まとめると、こんなところでしょうか。商品・記事・予約情報、なんらかの一覧を出力するときは覚えておきたいメソッドかなと思います。