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を使うときの同じようにかけます。
強引であまり褒められた方法ではありませんが、これで目的は達成できました。