ブログ・エス技研

当ブログは引越しをしました。10秒後に自動で転送しますが、転送されない場合は、http://blog.s-giken.net/ をご覧ください。
ブログ・エス技研 TOP  >  スポンサー広告 >  CakePHP 2.x >  CakePHP 2.3 Search Pluginで検索処理 その1設置方法

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --年--月--日 --:-- ] カテゴリ:スポンサー広告 | TB(-) | CM(-)

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

CakePHP 2.0系の Search Pluginで検索処理を作ります。

参考にしたのは下記のサイト。文面はふざけている部分もありますが、内容は至ってしっかりしたもので、非常に参考になります。
また、ページャーの処理やソート機能なども Bakeするのではなく、それぞれ解説をしながら作っていきますので非常に勉強になります。
http://torhamzedd.halteria.com/2012/01/cakephp20search-plugin22.html

上記のサイトを読みながら、プラグインをダウンロードして、所定の場所にインストールしてください。私の場合は、ダウンロードしたファイルは、最新版の 2.3でした。


ここで注意してほしいのは、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
--------------


続いて、テーブルを作りましょう。
こちらも上記サイトにあるものをそのまま使いました。また、データもそのまま入れました。

さらに続けて、Model、Controller、Viewを作ります。
Viewは、上記のサイトにあるものをそのままで問題ありませんが、Model、Controllerは、PHPのファイルですのでファイルの先頭に「<?php」を記述するのを忘れないようにしておきましょう。

そして、一度表示させて、検索フォームを追加するあたりまでは特に問題ないかと思います。


ページャーの設定などは、bakeで出てくるものをそのまま使うこともできますので、bakeで作ったところに検索処理を追加する場合などは、ページャーの一覧を表示する「app/View/Elements/pager.ctp」の設定は不要となるでしょう。

また、「UserController.php」は、最終的には下記のようになります。

--------------(/app/Controller/UserController.php)
<?php
class UsersController extends AppController {  
  
  public $name = 'Users';  
  public $uses = array('User', 'Profile');  

  public function beforeFilter() {
    // ページャ設定  
    $pager_numbers = array(
      'before' => ' - ',
      '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)
<?php
class User extends AppModel {  
  public $name = 'User';  
  
  // 検索プラグイン  
  public $actsAs = array('Search.Searchable');  

  // 検索対象のフィルタ設定
  public $filterArgs = array(
    array('name' => '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)
<?php
class UsersController extends AppController {  
  
  public $name = 'Users';  
  public $uses = array('User', 'Profile');  

  public $components = array('Search.Prg');  
  public $presetVars = array();  

  public function beforeFilter() {

    // 検索対象のフィールド設定代入
    $this->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'));
  }
}
--------------


【CakePHP2.3 Search Plugin検索処理 目次】
CakePHP2.3 Search Pluginで検索処理 その1設置方法
CakePHP2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHP2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHP2.3 Search Pluginで検索処理 その4前方一致検索、後方一致検索、不等号による検索、between句による範囲検索
CakePHP2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHP2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHP2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索
関連記事
スポンサーサイト
[ 2013年07月30日 23:24 ] カテゴリ:CakePHP 2.x | TB(0) | CM(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

エス技研

Author:エス技研
性別:男性
職業:Web系エンジニア
エンジニアになって 15年ほど経ちますが、その途中で 5年ほどディレクタ、マネジメントを中心とした業務を行っていたためにやや現場を離れていましたが、転職をきっかけに 2012年に現場に復帰し、新たな技術を楽しみながら勉強しています。
メインの環境は LAMP環境です。

FC2ブログランキング
FC2カウンター
FC2拍手ランキング
GoogleAdWords
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
検索フォーム
ブロとも申請フォーム
QRコード
QR
フリーエリア


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。