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

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

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。Ruby on Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。軽度の資格マニアで、情報処理技術者試験(16区分17回 + 情報処理安全確保支援士試験)、技術士(情報工学部門)、Ruby Programmer Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。

babaの書いた記事

関連する記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ