エス技研

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


CakePHP 2.3 Search Pluginで検索処理 その1設置方法

      2017/03/12

Search Pluginで検索処理 設置方法

 

プラグイン設置の参考サイト

 
CakePHP 2.0系の Search Pluginで検索処理を作ります。
 
参考にしたのは下記のサイト。文面はふざけている部分もありますが、内容は至ってしっかりしたもので、非常に参考になります。
また、ページャーの処理やソート機能なども Bakeするのではなく、それぞれ解説をしながら作っていきますので非常に勉強になります。
http://torhamzedd.halteria.com/2012/01/cakephp20search-plugin22.html
 
上記のサイトを読みながら、プラグインをダウンロードして、所定の場所にインストールしてください。私の場合は、ダウンロードしたファイルは、最新版の 2.3でした。
 
 

Search Plugin設置の際の注意ポイント

 
ここで注意してほしいのは、Pluginを設置したら「/app/Config/bootstrap.php」にそのことを記述する必要があるということです。(上記のサイトには書かれていません。)
 
「/app/Config/bootstrap.php」の 65行目あたりから Pluginの設定についての記述がありますので、そのあたりに下記のコードを追加しましょう。
 
————–(/app/Config/bootstrap.php)

CakePlugin::load(array('Search'));

————–
 
もしくは、70行目あたりにある下記のものをコメントの外に出して、有効にする方法でも OKです。こちらは、Pluginフォルダにあるものはすべて有効にするという記述の方法ですので、すでに有効にしてある場合もあるでしょう。その場合は、上記の記述を書かなくても問題ありません。両方書いていても問題ありません。
 
————–(/app/Config/bootstrap.php)

CakePlugin::loadAll(); // Loads all plugins at once

————–
 
 
[amazonjs asin=”4774153249″ locale=”JP” title=”CakePHP2 実践入門 (WEB+DB PRESS plus)”]
 

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

 
続いて、テーブルを作りましょう。
こちらも上記サイトにあるものをそのまま使いました。また、データもそのまま入れました。
 
さらに続けて、Model、Controller、Viewを作ります。
Viewは、上記のサイトにあるものをそのままで問題ありませんが、Model、Controllerは、PHPのファイルですのでファイルの先頭に「<?php」を記述するのを忘れないようにしておきましょう。
 
そして、一度表示させて、検索フォームを追加するあたりまでは特に問題ないかと思います。
 
 
ページャーの設定などは、bakeで出てくるものをそのまま使うこともできますので、bakeで作ったところに検索処理を追加する場合などは、ページャーの一覧を表示する「app/View/Elements/pager.ctp」の設定は不要となるでしょう。
 
また、「UserController.php」は、最終的には下記のようになります。
 
————–(/app/Controller/UserController.php)

 ' - ',
      'after'=>' - ',
      'modulus'=> 10,
      'separator'=> ' ',
      'class'=>'pagenumbers'
    );
    $this->set('pager_numbers', $pager_numbers);
  }

  public function index()  
  {  
    $this->paginate = array(  
      'limit' => 3  
    );  
    
    $this->set('users', $this->paginate('User'));  
  } 

}

————–
 
 
ここで、その 1は終了。
ここまでは問題ないでしょうか?
 
そして、ここからはその 2が始まります。
http://torhamzedd.halteria.com/2012/01/cakephp20search-plugin2.html
 
 
paginatorの sortの説明や、その機能を使って並び替えをする処理も特に問題ないと思います。
 
そして、続けて「Searchプラグインの準備」とありますが、これは問題ないでしょう。
すでに最初の方で書きましたが、「/app/Config/bootstrap.php」にプラグインを読み込む設定を記述するという内容ですが、最初のタイミングで記述していないと、おそらく最初の表示確認でエラーが出てここまで進めていないはずですから。
 
 
続けて、Model、Controllerの設定を行いますが、最終的には以下のようになります。
 
————–(/app/Model/User.php)

 'id',       'type' => 'value', 'field' => 'User.id'),
    array('name' => 'username', 'type' => 'like',  'field' => 'User.username'),
    array('name' => 'nickname', 'type' => 'like',  'field' => 'Profile.nickname'),
  );

  // 検索対象のフィールド設定
  public $presetVars = array(
    array('field' => 'id',       'type' => 'value'),
    array('field' => 'username', 'type' => 'value'),
    array('field' => 'nickname', 'type' => 'value'),
  );


  // アソシエーション  
  public $hasOne = array(  
    'Profile' => array(  
      'className'  => 'Profile',  
      'foreignKey' => 'user_id',  
      'conditions' => null,  
      'fields'     => null,  
      'dependent'  => true,  
    ),  
  );  
}  

————–
 
 
————–(/app/Controller/UsersController.php)

presetVars = $this->User->presetVars;

    // ページャ設定  
    $pager_numbers = array(
      'before' => ' - ',
      'after'=>' - ',
      'modulus'=> 10,
      'separator'=> ' ',
      'class'=>'pagenumbers'
    );
    $this->set('pager_numbers', $pager_numbers);
  }

  public function index() {
    // 検索条件設定
    $this->Prg->commonProcess();
    // 検索条件取得
    $conditions = $this->User->parseCriteria($this->passedArgs);

    $this->paginate = array(
      'conditions' => $conditions,
      'limit' => 3,
    );
    $this->set('users', $this->paginate('User'));
  }
}

————–
 
 
 
【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

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

Message

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

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

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

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

  関連記事

Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法

CakePHP4のコマンド(シェル)に対して、環境変数を指定して実行する方法を解説。LinuxとWindows上のXAMPPとでは記述方法が異なるため、Windowsのsetコマンドについても詳細解説。

CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法

CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。

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を編集する処理の追加を忘れていたからだった。

CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法

CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。

CakePHP3ログファイルの出力方法・$this->log()の解説
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説

コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。

CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法

CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。

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

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

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

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

URL短縮サービス「TTTオンライン(https://ttt.onl)」公開
URL短縮サービス「TTTオンライン(https://ttt.onl)」公開

URL短縮サービス「TTTオンライン(https://ttt.onl)」を公開。メールやSNSでは使いにくい長いURLを短いURLに変換するサービス。QRコードも。Google URL Shortenerが2019年3月にサービス終了。

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

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