異なる検索条件の結果を1つのページャーで
データベースへ照会した後、その結果を表示したいがレコード数が多い場合、ページ制御が必要になる。
CakePHPにはそのための仕組みがあるので簡単にできるけど
2通りの検索条件による検索結果を1ページに表示し、ページ移動のためのナビ(「次へ」や「前へ」や「○ページ」など)は一つにしてくれ
という要求があって足掻いてみたいのでメモメモ。
環境は
- XAMPP 1.7.7
- CakePHP 1.2.8
まずコントローラー。
<?php class HogeController extends AppController { // ... 略 ... public function index() { // 条件1と条件2でのレコード数を調べておく $cnt1 = $this->_countRecords1(); $cnt2 = $this->_countRecords2(); // 件数の多いほうを後にしてやる if ($cnt1 < $cnt2) { $data1 = $this->_paginate1(); // $this->paginate()の戻り値を取得している $data2 = $this->_paginate2(); // 同上 } else { $data2 = $this->_paginate2(); $data1 = $this->_paginate1(); } $this->set('data1', $data1); $this->set('data2', $data2); } } ?>
ってしてやると、ビュー側の$paginatorが件数の多い方の設定で上書きされる。
<?php foreach ($data1 as $d1): ?> <!-- 表示 --> <?php endforeach; ?> <?php foreach ($data2 as $d2): ?> <!-- 表示 --> <?php endforeach; ?> <?php echo $paginator->prev('<< prev'); echo ' '; echo $paginator->numbers(); echo ' '; echo $paginator->next('next >>'); ?>
件数が少ない方のデータは、最後に表示されたデータがずっと表示されるっぽい。
その後
ページによっては2つのページャーが必要になったりして、結局JavaScriptでやることになった。