CakePHP の Paginate を使って keyword を GET で受け取って検索結果を一覧にしつつページングを簡単に設定するための最低限のメモです。
コントローラーの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 | function search() { $keyword = $this->params['named']['keyword']; $this->paginate = Array( 'conditions' => $this->Hoge->search($keyword), 'limit' => 50, 'order' => array( 'modified' => 'desc' ) ); $this->set('keyword', $keyword); $this->set('result', $this->paginate('Model')); } |
参考: Paginatorの使い方。CakePHP1.2 – CPA-LABテクニカル
Hoge コンポーネントの設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function search($keyword) { $keyword = mb_convert_kana($keyword, "s", "UTF-8"); $keywords = explode(' ', $keyword); $params = Array(); foreach($keywords as $count => $keyword) { $space = ''; for($i = 0; $i < $count; $i++) { $space .= ' '; } $params['name ' . $space . 'LIKE BINARY'] = '%' . $keyword . '%'; } return $params; } |
ビューの設定
1 2 3 4 5 6 7 8 9 10 11 12 | <h2 class="name"><?php echo h($keyword); ?>の検索結果</h2> <div class="search"> <?php $paginator->options(array('url' => 'keyword:' . urlencode($keyword))); echo $paginator->prev('<< '.__('previous', true), array(), null, array('class'=>'disabled' )) . ' | '. $paginator->numbers(). ' | '. $paginator->next(__('next', true).' >>', array(), null, array ('class'=>'disabled' )); ?> <?php echo $hoge->searchResult($result); ?> </div> |
参考: CakePHP: the rapid development php framework: Cakephp1.2のPaginatorのバリエーション
コメント