エス技研

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 5.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHPで Auto Incrementを外すと Duplicate entry '0' for keyのエラーが出るかも
CakePHPで Auto Incrementを外すと Duplicate entry ‘0’ for keyのエラーが出るかも

CakePHPでAuto Incrementの設定を変更したときに「Duplicate entry ‘0’ for key」のエラーが出た。原因はModel内で IDを編集する処理の追加を忘れていたからだった。

CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法

CakePHP4系、5系ではAuthenticationを使用してログイン認証を行う。その認証でID、PASS以外の削除フラグなどの条件を加えたいときの対応方法について解説。

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

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

CakePHP3のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う

CakePHP3、CakePHP4では処理を高速化する手法の一つとしてキャッシュを利用している。しかし、その情報は元の情報を更新しても反映されない場合がある。そんなときはキャッシュを削除する必要がある。

CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応

CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!

CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ

CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。

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

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

CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介

CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。

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

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

CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可
CakePHP3のプラグイン「CakeDC/Users」を日本語化・翻訳ファイルもダウンロード可

CakePHP3のユーザ管理、ログイン認証プラグインである「CakeDC/Users」のメッセージを日本語にする手順の解説とともに、日本語の翻訳ファイルを提供。ファイルを設置すれば日本語になる!