Pocket

CakePHP で検索用プラグインを利用する方法

  • add this entry to hatena bookmark

CakePHP 2.3.10 を利用して、bake を使って簡単なWebアプリを作りました。そのWebアプリに検索機能を付けたいので、CakePHP の Search Plugin を導入して、検索機能を使えるようにしました。

その対応を記録しておきます。

1.CakePHP バージョン、bakeで作成してあるWebアプリ

CakePHP は、2.3.10 を導入してあります。

データベースは、MySQLを導入してあり、使える状態になっていることを前提とします。

bake で作成したWebアプリは簡略化する為、以下とします。

  • Model/Sale.php
  • View/Sales/index.ctp
  • Controller/SalesController.php

ブラウザで表示した状態は以下の画面です。

all-list

後ほど検索結果を確認しやすくするために、データを4件登録してあります。

検索フォームは、この画面のリストの上に表示させる事にします。

2.Search Plugin の初期導入

Search Plugin は「Search Plugin for CakePHP」で、ダウンロード先は https://github.com/CakeDC/search です。

ファイルをダウンロードして、CakePHP の Plugin ディレクトリに配置します。

# cd /usr/local/src
# wget https://github.com/CakeDC/search/archive/master.zip
# mv master master.zip
# unzip master.zip
# mv search-master/ Search
# mv Search/ (CakePHP導入先)/app/Plugin/

次に、app/Config/bootstrap.php で、Search Plugin をロードする設定を入れます。設定する内容は以下です。

CakePlugin::load('Search');

以上で、Search Plugin の初期導入は終わりです。
次は、Webアプリでの設定になります。

3.WebアプリへのSearch機能の実装

「1.CakePHP バージョン、bakeで作成してあるWebアプリ」で記載のとおりですが、以下のMVCアプリがあります。

  • Model/Sale.php
  • View/Sales/index.ctp
  • Controller/SalesController.php

これらに対して、Search対応を施します。

まず今回は、Webアプリ内で Search機能を使うための基礎設定を先に入れてしまいます。

Model/Sale.php の「class Sale extends AppModel」配下に以下の設定を入れます。

public $actsAs = array('Search.Searchable');

次に、Controller/SalesController.php の「class SalesController Extends AppController」配下に以下の設定を入れます。

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

次からが実際のSearch実装です。

まず、検索フォームから作ります。検索フォームはパーツ化する為、Element化します。

View/Elements/searchForm.ctp を以下の内容で作成します。

<?php echo $this->Form->create('Sale', array('url' => '/sales/index'))?>

<fieldset>
  <legend>Search</legend>
  <dl>
    <dt><label>Catalog</label></dt>
    <dd><?php echo $this->Form->input('catalog_id', array( 'type'=>'numeric', 'div'=>false, 'label'=>false))?></dd>
  </dl>
  <?php echo $this->Form->submit('検索', array('div' => false, 'escape' => false))?>

</fieldset>

<?php echo $this->Form->end()?>

次に、作成した View/Elements/searchForm.ctp を、View/Sales/index.ctp で読み込みます。
以下の行を View/Sales/index.ctp の適当な箇所に入れてください。

<?php echo $this->element('searchForm'); ?>

次は Model/Sale.php に以下の行を入れます。先ほどこのファイルに設定した行の下に入れます。

public $actsAs = array('Search.Searchable');  ←これは先ほど設定した内容
public $filterArgs = array('catalog_id'=> array('type' => 'value'),);

最後に、Controller/SalesController.php の index() に以下の設定を入れます。

        public function index() {

                $this->Prg->commonProcess();
                $this->paginate = array(
                        'Sale' =>
                array(
                        'conditions' => array(
                                $this->Sale->parseCriteria($this->passedArgs)
                        )
                ));

                $this->Sale->recursive = 0;
                $this->set('sales', $this->Paginator->paginate());
        }

以上で、設定は完了です。

4.ブラウザ確認

検索フォームがちゃんと表示されるか、ブラウザで確認します。

search-form

検索フォームが表示されています。

次に、検索条件を入れてみます。「1 = CakePHP」、「2 = JMeter」となっています。「1」を入力して「検索」ボタンをクリックします。

search-result1

「1 = CakePHP」としていますので、しっかり検索結果のみが表示されています。

念のため、「2」を入力して「検索」ボタンをクリックします。

search-result2

「2 = JMeter」としていますので、しっかり検索結果が表示されています。

以上が、bake で作成したWebアプリに検索機能を追加する時の手順になります。

Pocket

コメントを残す

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


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。