icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【Laravel】『前へ・次へ』のみの、シンプルなページネーションを実装する(simplePaginate)

更新: 2024/09/25 2889文字

今回はフレームワークLaravelで、『前へ・次へ』のみの、シンプルなページネーションを作ってみます。Laravelにはページネーション出力用のメソッドも搭載されているとのこと。さっそく試してみましょう。

以前行った内容~LaravelのsimplePaginateは未使用

WP rest-apiを取ってくるアプリケーション

以前当サイトで扱った内容で、WordPressのrest-apiを取ってきてLaravelで表示するといったものでしたが、これはページネーションのメソッドを使っておらず、jsで対応しました。単純な表示なら大丈夫かなという気はしますが、管理人的には搭載メソッドも押さえておきたいところです。

データベースからユーザー一覧みたいなのを取ってくる(これにページネーションつけたい)

こちらも以前行った内容で、DBクラスでSQLiteデータベースを操作しました。一覧表示のときはずらーっと出てくるので、件数が増えたときはページネーションがあると使い勝手が良くなります。

Laravelのページネーションメソッドについて

英語版・日本語版ドキュメントを両方見てみました。『前へ・次へ』のタイプはsimplePaginate、『1・2・3~』みたいなタイプはpaginateで実装できるとのことです。

また、注意点として『デフォルトではTailwind CSSと互換性がある』ということで、Tailwindを使ってない場合は表示がおかしくなる(ページネーションの矢印がやたらデカい)みたいな例が確認できました。

LaravelのsimplePaginate使い方

データベースから取ってくるページでsimplePaginateを使ってみます。事前準備として〇〇/public/dbtest01でindexのメソッド使うようにルーティング設定がしてあります。また、コマンドで追加のコントローラー(SqlController)も用意しています。

インストールディレクトリ/app/Http/Controllers/SqlController.php

コントローラーのindexメソッドです。idがある場合はそのレコードを表示して、無い場合は一覧を出すようになっています。この一覧のときにsimplePaginateを使ってみました。かっこ内の3は、1ページ3件という形になります。

$items =DB::table('people')->simplePaginate(3);

DB::tableという書き方になっていますが、これをselectを使って以下のように書いた場合は・・・

$items =DB::select('select * from people')->simplePaginate(3);

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互換になっている点は注意

まとめると、こんなところでしょうか。商品・記事・予約情報、なんらかの一覧を出力するときは覚えておきたいメソッドかなと思います。


【カテゴリ】- Laravel
【タグ】-

関連記事