CakePHPのpaginatorは、ページングの他にソートもやってくれて大変便利です。
しかし、たまに「ソートはするけどページングしたくない」ということもありますよね?
そんなとき、$this->paginate['limit'] = null のようにやると、Zero Divide でエラーになります。paginatorの中ではそんなことは想定されていません。
ゼロからソート部分を作るのも面倒なので、paginatorのソート部分だけを無理矢理使わせてもらいましょう。
コントローラで以下のように処理します。
//手動でsort $order = null; if (isset($this->passedArgs['sort'])) { $direction = null; if (isset($this->passedArgs['direction'])) { $direction = strtolower($this->passedArgs['direction']); } if ($direction != 'asc' && $direction != 'desc') { $direction = 'asc'; } $order = array($this->passedArgs['sort'] => $direction); } //paginate処理はするが、そのデータは使わない $this->paginate(); //全件を表示 $result = $this->Model->find('all', array('order' => $order)));
この方法なら、ビューでは、
$paginator->sort('なまえ', 'User.name');
のように、普通にpaginatorを使うときの同じようにかけます。
強引であまり褒められた方法ではありませんが、これで目的は達成できました。