単一キーワードによるページ繰りのコーディングを一部変更することによって実装可能。
■[cakePHP1.2]ページング処理(Paginate)で検索キーを指定したページ繰りを実装する
検索キーワードを3つ、それぞれの検索キーワードをAND条件で検索する。(複数のフィールドはOR条件で検索する)
1.フォームからキーワードを入力する。
/app/views/hoges/keyword_input.ctp
echo $form->text('Hoge.keyword');
echo $form->text('Hoge.keyword2');
echo $form->text('Hoge.keyword3');
・Formヘルパーのtextタグを追加。
2.コントローラでページングを考慮してデータを取得する。
/app/controllers/hoges_controller.php
//フォームの値が設定されていたら(キーワード入力"keyword_input"から遷移)
if (strlen($this->data['Hoge']['keyword'])) {
$skey = h($this->data['Hoge']['keyword']);
$skey2 = h($this->data['Hoge']['keyword2']);
$skey3 = h($this->data['Hoge']['keyword3']);
}else {
$skey = $this->params['named']['keyword'];
$skey2 = $this->params['named']['keyword2'];
$skey3 = $this->params['named']['keyword3'];
}
$this->Hoge->recursive = 0;
$this->paginate = array("conditions" => array("and" =>
array("or" => array("Hoge.data1 LIKE" => "%".$skey."%",
"Hoge.data2 LIKE" => "%".$skey."%",
"Hoge_data3 LIKE" => "%".$skey."%")),
array("or" => array("Hoge.data1 LIKE" => "%".$skey2."%",
"Hoge.data2 LIKE" => "%".$skey2."%",
"Hoge.data3 LIKE" => "%".$skey2."%")),
array("or" => array("Hoge.data1 LIKE" => "%".$skey3."%",
"Hoge.data2 LIKE" => "%".$skey3."%",
"Hoge.data3 LIKE" => "%".$skey3."%"))),
"limit" => 10, "order" => array("Hoge.id" => "asc"));
$this->set('hoges', $this->paginate());
//Viewへ検索キーを渡す
$this->set("search_keyword", $skey);
$this->set("search_keyword2", $skey2);
$this->set("search_keyword3", $skey3);
・ $skey,$skey2,$skey3には、フォームで入力されたキーワードをセットしておく。または遷移したときにURLに指定されたキーワードをセットする。
・ 上記はキーワードが3つ入力された場合の処理。キーワードが2つ、1つの場合はそれぞれconditionsの設定内容を変えること。
・入力キーワードのチェック処理は必須。
(全て空白ではないか、上から順序よくセットされているか、桁数チェック、など)
3.ページング処理を実装したビューを表示する(ページ遷移タグの編集部分)
/app/views/hoges/view.ctp
$paginator->first("先頭",
array(
'url' => array('keyword:'.urlencode($search_keyword), 'keyword2:'.urlencode($search_keyword2), 'keyword3:'.urlencode($search_keyword3))
)
);
・ページ表示処理は単一キーワードの場合と同様。
・$paginator->prev、$paginator->numbers、$paginator->next、echo $paginator->last についても、'url'については上記のように指定することにより、遷移先に引き継ぐことができる。
■参考記事
条件をつけたpaginateでページ繰りができない cakePHPフォーラム
CakePHP ポケットリファレンス (Pocket Reference)
posted with amazlet at 08.08.18
株式会社ブルーオーシャン 岡田 佳典
技術評論社
売り上げランキング: 9365
技術評論社
売り上げランキング: 9365
おすすめ度の平均: 


タグ:cakephp