【CakePHP入門】Pagenation(ページネーション)の使い方

こんにちは!フリーエンジニアのせきです。

CakePHPには、簡単にページネーションを実装してくれる機能があります。

この記事では、

・ページネーションとは何か知りたい
・CakePHPページネーション機能の使い方を知りたい

という基本的な内容から、

・テーブルを結合してページネーションする方法を知りたい

といった応用的な内容に関しても解説していきます。

今回はそんなCakePHPのページネーションの使い方について、わかりやすく解説します!

Pagenation(ページネーション)とは

ページネーションとは、情報の多いページを複数のページに分割し、各ページへのリンクを表示することで、情報にアクセスしやすくする機能です。

Webシステムでは、データベースから取得した情報を一覧表示する時によく使われます。

ページネーションを使うことで、ユーザにとって情報を探しやすく、使いやすいシステムになります。

CakePHPではControllerクラスに設定を行うことで、簡単にページネーションの機能を使うことができます。

これから、具体的なページネーションの使い方について解説してきます。

ページネーションの使い方

事前準備

ページネーションの機能を確認するため、ユーザ情報の一覧を表示する機能を作成します。

使用するのは、以下のUSERテーブルです。

Model、Controller、Viewの実装は、以下のようにしています。

・Model
[プロジェクトのパス]/src/Model/Table/UserTable.php

[プロジェクトのパス]/src/Model/Entity/User.php

・Controller

USERテーブルを全件検索します。
[プロジェクトのパス]/src/Controller/UserController.php

・View

USERテーブルのすべての情報を表示します。
[プロジェクトのパス]/src/Template/User/index.ctp

「http://[サーバ名]/[プロジェクト名]/user」にアクセスすると、以下のような画面が表示されます。
001
あらかじめ8件のデータをテーブルに挿入してあります。

基本的な使い方

ページネーション機能を使うには、Controllerクラスの$paginate変数にページネーションの設定を追加します。

1ページに表示するデータの件数limitプロパティを使用して設定します。

3件ずつ表示する場合は、以下のように設定します。

paginateメソッドを使用し、Modelに渡すデータを作成します。

UserControllerクラスは、以下のようになります。

次に、ページネーションのためのリンクをViewに追加します。

Viewの中では、PaginatorHelperクラスという各ページへのリンクやページ番号の制御を行うクラスを使用します。

「$this->Paginator」で使用することができ、以下のような機能が用意されています。

$this->Paginator->first(‘<<‘)」は、先頭ページへのリンクを返します。リンク文字「'<<‘」は任意に指定できます。

$this->Paginator->prev(‘<‘)」は、前ページへのリンクを返します。リンク文字「'<‘」は任意に指定できます。

$this->Paginator->numbers()」は、ページ番号で各ページへのリンクを返します。

$this->Paginator->next(‘>’)」は、次ページへのリンクを返します。リンク文字「’>’」は任意に指定できます。

$this->Paginator->last(‘>>’)」は、最終ページへのリンクを返します。リンク文字「’>>’」は任意に指定できます。

これらを使用し、index.ctpを以下のように修正します。

もう一度「http://[サーバ名]/[プロジェクト名]/user」にアクセスすると、3件ずつページングされています。

1ページ目
002

2ページ目
003

ソートの使い方(order)

CakePHPのページネーション機能には、データのソート機能も含まれています。

表示するデータをソートする場合は、Controllerクラスで$paginate変数のorderプロパティを使用します。

上のように設定して表示すると、AGEの昇順でソートされています。

(ソートされた結果がわかりやすいように、1ページに表示するデータ件数は「10」に変更しています)
004

ソートは複数条件で行うこともできます。

上のように設定すると、ADDRESSの昇順でソートし、さらにそのデータをAGEの昇順でソートします。
005

ソートの使い方(sort)

$paginate変数のorderプロパティによるソートは、一覧表示時に既にソートされていますが、ユーザが一覧のヘッダをクリックして、ソートを行う機能もあります。

index.ctpの一覧ヘッダ部分を、以下のように修正します。

ヘッダ文字列がリンクになり、クリックするとその項目でソートされます。

下は「NAME」をクリックしてソートした状態です。
006

テーブルを結合してページネーションする方法

ページネーション機能を使用して、複数のテーブルを結合して一覧表示し、ページングすることができます。

一覧に表示されているCOMPANY_IDを、COMPANYテーブルに登録されている名前で表示してみます。

USERテーブルが持つCOMPANY_IDに紐づく、COMPANYテーブルを作成します。

以下のデータを挿入します。

COMPANYテーブルのModelを作成します。

[プロジェクトのパス]/src/Model/Table/CompanyTable.php
[プロジェクトのパス]/src/Model/Entity/Company.php

USREテーブルのModelに関連の定義を追加します。

[プロジェクトのパス]/src/Model/Table/UserTable.php

Controllerクラスで$paginate変数のcontainプロパティを使用し、以下のように設定します。

index.ctpを以下のように修正します。

COMPANYテーブルのNAMEは、「$user->company->NAME」で取得できます。

表示するとCOMPANYテーブルが結合され、ページングも実装されています。
007

まとめ

今回はページネーションの使い方について解説しました。

CakePHPのページネーション機能を使うと、ページングやソートを簡単に実装することができますので、ぜひ使ってみてください。

ページネーションの使い方を忘れてしまったら、この記事を思い出して下さい!

自分にプログラミングなんて・・・と思っていませんか?

今後10年間で今ある職業の『77%』はなくなると言われています。

人工知能や機械学習を筆頭にVR、AR、ドローンなどの最先端技術の発達はこれからのあなたの働き方に間違いなく影響を与えるでしょう。

将来を見据えてプログラミングができるようになってエンジニアになりたい、自分だけにしかできないクリエイティブな仕事がしたい、、、とお考えの方も少なくないでしょう。

と、同時に「難しそう、、自分にはできないだろう、、、」と諦めている方も多いのではないでしょうか。

弊社マンツーマンレッスンは、お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、オリジナルアプリ開発や、フリーランスとしての仕事獲得まで支援しています。

まずは『無料体験レッスン』で弊社コンサルタントと一緒にあなた専用の学習カリキュラムを考えてみてはいかがでしょうか?

詳しくは下の画像をクリックしてください。

cta_mtm2

LINEで送る
Pocket

書いた人

せき

せき

フリーランスでWebシステム開発やゲーム開発をしています。
読者の方にプログラミングの面白さをお伝えしたいです。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説