エス技研

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のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。

CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装

CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。

CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)

CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。

CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説

CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。

CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定

CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。

CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応

CakePHP3.7でCookieを保存、取り出し、削除する方法を解説。CakePHP3でのCookieの取り扱いはバージョンごとに変更されるため、環境に合わせた方法を探す必要がある。

MySQL、CakePHP 2.3で「tinyint(1)」の Boolean型の動作を再確認

MySQL+CakePHPの環境で「tinyint(1)」を利用する際の動作を検証。「tinyint(1)」の Boolean型について CakePHPでは自動処理が実施されていることを確認しました。

CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得
CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得

URLやドメイン、フォルダへのパスの取得は、ビューではUrlHelperを使い、コントローラーではRouterクラスを使います。第2引数の指定でURLを取得することも可能。

CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。

Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説

CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。