エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法

      2014/06/26

Search Pluginで検索処理 設置方法 その2

 

Search Pluginで表示件数を動的に変える

 
前回、「CakePHP 2.3 Search Pluginで検索処理 その1設置方法」で検索の処理を作成しました。
検索の処理を入れるだけならば、あちこちのサイトを参考にしながらそれほど困った思いをせずとも導入できるんじゃないかと思いますが、検索方法は多種多様で、ここをもう少しこんな感じで検索したいなぁ、と導入事例から少し変わった検索方法を考えると途端に情報が少なくなり、どうやって実装していいのかわからないといった状況に陥りがちです。
 
そんなわけで、私が実際に必要に駆られて作成した検索の処理を交えながら、多種多様な検索方法のうちの少しでも情報提供できたら、と思っています。
 
 
そんなわけで、第2回目は、表示件数を動的に変える方法です。
 
前回の説明では 1行 3件で固定で設定しましたが、1ページに 10件、30件、50件といった件数で検索するユーザに表示件数を指定させたい場合もあるでしょう。
 
そんなときの方法です。
 
 

Search Plugin設置のサンプルコード

 
基本的な処理は、前回のものをそのまま使っていますので、それを参考にしてください。
その上で、今回の解説の部分を追加していきます。
 
 
まずやるべきことは、検索フォームに表示件数の項目を追加することです。
「表示件数」と編集されている行以下 3行を追加します。
 
ここで追加する項目名を「limit」とすることが重要なポイントで、これで件数を制限することができます。「limit」以外の項目名にすることはできません。
 
————–(/app/View/Elements/searchForm.ctp)

————–
 
 
続いて、Modelです。
「array(‘field’ => ‘limit’, ‘type’ => ‘value’),」の行を追加するだけです。
これは、入力された値をフォームに表示させる処理ですので、入力エリアが追加された場合にはこの行を追加していきます。
 
————–(/app/Model/User.php)

————–
 
また、前回の流れで「/app/Controller/UsersController.php」の中には「’limit’ => 3,」という設定がしてありますが、これは適宜変更してください。
この項目が設定してある場合は、「表示件数」の入力がない場合のデフォルト値として使用されます。設定がない場合は「’limit’ => 20,」が設定されているものとして処理されます。また、limitの設定がある、なしにかかわらず、「表示件数」の入力がある場合は、そちらが優先して処理されます。
 
ただし、「limit」の設定がある場合は、それ以上大きな数値が入力されても limitで設定されている値がが最大値として設定されます。サーバの負荷を考え、1ページの表示件数を制限したい場合には設定しておく必要がある項目でしょう。
「limit」の設定がない場合は、デフォルト値は無関係に入力された件数が優先されて何件でも表示されます。
 
 

Search Plugin設置のカスタマイズポイント

 
また、Controllerの中で「public $presetVars = array();」と設定し、Modelで「public $presetVars = array(……」の配列を設定し、再び、Controllerで「$this->presetVars = $this->User->presetVars;」として値を取得するという処理を書いています。
この部分ですが、Modelのところで少し説明しましたが、検索フォームから入力された値を、再度画面を表示する際に入力エリアに入力された値を編集するために使われている処理で、今回作ったプログラムではそれを明示して書いています。
 
この部分は、Controllerの「public $presetVars = array();」を「public $presetVars = true;」とすることで自動化することも可能です。(この場合は、Controllerの「$this->presetVars = $this->User->presetVars;」の部分も消す必要があります。)
 
ただ、「$presetVars = true;」という設定は、Modelを使って入力値を自動的に設定する処理となっているため、Modelにない項目(DBの項目ではないもの)は、自動的に処理をすることができません。
つまり、今回は「limit」という値を追加しましたが、limitはテーブルにない項目ですので、そのような項目を追加した場合は「$presetVars = true;」の設定では limitの値を取れなくなるため、前回からの流れにあるように、入力された項目を明示的に書いていく必要が出てきます。
 
 
 

Search Plugin設置の重要ポイント

 
おまけ
処理の途中に、『「limit」とすることが重要なポイント』と書きましたが、この方法を発見するまでにおおよそ 1か月くらいかかってしまいました...
 
どこかに表示件数を動的に設定できる方法を書いている方がいるのではないか、と考えて、ググり続けること 3日....
しかし、3日間ググり続けてもその方法を見つけることができず、一度はあきらめました。
あきらめたとはいえ、その処理を作らないわけにはいかなかったため、createdの項目を検索項目に利用して、その値を取得して強引に「limit」の値に突っ込むという方法を編み出して、恥ずかしい処理ながら見ため的には表示件数を動的に設定する方法を作り上げました。
(検索フィールドから入力された値を取得する方法をしっかり理解していれば、そんな強引な方法を取らなくてもよかったわけですが、CakePHPを触り始めて数週間目だった 1か月前の私にはそれくらいしかできなかったワケです。)
 
ですが、1か月ほど経ったある日、別の作業をしているときにふとひらめいたのです。
Controllerの「limit」でページ数を制限しているなら、入力の項目名を「limit」にしてみたらいいんじゃない??と。
 
するとどうでしょうっ!!
 
 おぉっ!!うまくいったっ!!
 
この瞬間がプログラムを作っていてよかったなぁって思える瞬間の一つですかね。
 
 
 
【CakePHP 2.3 Search Plugin検索処理 目次】
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHP 2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法

CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。

CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説

CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。

CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい

アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。

CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。

CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説
CakePHP3で静的ページの作成は webrootか pagesを使う。トップページを参考に解説

CakePHP3で静的なページを設置する場合の方法(webrootとpagesとを活用する方法)を解説。pagesの解説はデフォルトのトップページがどう表示されているかを参考に解説。ルーティングの機能も。

CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説
CakePHP3でユーザ定義の定数、変数を設定し、読み込む方法解説

CakePHP3で定数や共通で使う変数をまとめて設定し、プログラム内で読み込む方法を、bootstrap.phpに直接記述する方法と定数ファイルを分ける方法の3つの方法で解説。

CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

CakePHP3のインストールでURL rewriting......のエラーが!その解決方法解説
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説

CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。

CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。

CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント
CakePHP3で「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」などのエラーが出たときの確認するポイント

CakePHP3の開発で発生する「SQLSTATE[23000]: Integrity constraint violation」「SQLSTATE[42S22]: Column not found」のエラーには特有の原因もあるため、その説明と対処方法の解説。