2009/10/17

CakePHPに簡単な検索機能を実装する

続いて検索機能を追加しました。基本的にはFormからキーワードをもらって、条件に合わせたデータを取得して、index.ctpとかと同じ仕組みで表組み表示するようにすれば大丈夫なはず。

検索枠は色々なところにあると面倒くさそうなので、default.ctpのヘッダの下に設置。

default.ctp

<div id="search">
<form method="post" action="<?php echo $html->url(‘/contents/view_search’)?>">
<span class="window"><?php echo $form->input(‘key’,array(‘label’=>false, ‘div’ =>false));?></span>
<span class="submit"><?php echo $form->submit(‘Search’,array(‘label’=>false, ‘div’ =>false)); ?></span>
</form>
</div>

ここでdata[‘key’]に検索語が格納されるので、Paginateする時の条件式に組み込んでやりました。

contents_controller.php

function view_search() {
if(empty($this->data)) {
$this->render();
} else {
$key = $this->data[‘key’];
$this->Content->order = "date DESC";
$this->paginate = array("conditions" => array("or" => array("Client.client LIKE" => "%".$key."%", "Content.title LIKE" => "%".$key."%", "Content.content LIKE" => "%".$key."%")));
$this->set(‘contents’, $this->paginate());
}
}

後は前回と同じようにindex.ctpをコピーしてview_search.ctpというビューを作ってやれば完成。

結構単純作業だったはずが、コントローラーいじってもうまくいかず。クエリ見ていると、条件式にdata[‘key’]が代入されておらず、おかしいなおかしいなと思っていたら、form method=”post”がなぜか”get”になっていた、という罠。大分便利になってきましたよ。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円