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”になっていた、という罠。大分便利になってきましたよ。

加藤 康祐 / 企画・設計
プランナー、デザイナー。加藤康祐企画設計代表。Webデザインを入り口に、2005年よりフリーランスとしてのキャリアスタート。主な仕事としてベンチャー企業でのサービスのUXデザイン、独法との防災メディアの運営、社会的養護の子どもたちの自立を支援するNPOのサポート。ラグビーと料理、最近イラスト。
是非、フォローしてください!
Twitter / Instagram
売り上げランキング: 14,705
100円
フリーランスとして働き始めるってどういうことだったのか?フリーランスとして働くってどういうことなのか?フリーランスが目指すことってなんなのか?5年間の自分の経験から書きました。(2010年執筆)