エス技研

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 2.x 3.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い

CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP 2.3で PDFを作成する方法を調査「mpdf」「TCPDF」「FPDF」

CakePHPで PDFを編集、出力するには「mpdf」「TCPDF」「FPDF」といったプラグインがあり、使い勝手を比較検討しました。TCPDFが一番良さそうでした。

CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll

主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。

CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除

CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。

CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説

WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。

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

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

CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方

CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。

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

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

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

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