Tech Racho エンジニアの「?」を「!」に。

CakePHP paginatorのsortだけを使う

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を使うときの同じようにかけます。

強引であまり褒められた方法ではありませんが、これで目的は達成できました。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。