[CakePHP]カスタムpaginationを使い分ける方法

[CakePHP1.2.3]

カスタムpaginationはモデル内で、paginateメソッドをオーバーライドすることで、実現できます。

しかしこの方法の欠点としては、このモデルの全てのpaginationでこのカスタム仕様が有効になってしまうことです。例えば、公開ページはカスタム設定を使いたいけれども、管理画面ではカスタム設定を使いたくないという場合はあるかと思います。今回私もそういう使い方をする必要があり、解決方法を考えてみました。

解決方法としては、以下のように、メソッドの第7引数のextra変数を使って切り分けるのが良さそうです。

[php]
//モデル内
function paginate($conditions = null, $fields = null, $order = null, $limit = null, $page = 1, $recursive = null, $extra = array()) {

if (!empty($conditions)) {
$params[‘conditions’] = $conditions;
}
if (!empty($fields)) {
$params[‘fields’] = $fields;
}
if (!empty($order)) {
$params[‘order’] = $order;
}
if (!empty($limit)) {
$params[‘limit’] = $limit;
}
if (!empty($page)) {
$params[‘page’] = $page;
}
if (!empty($recursive)) {
$params[‘recursive’] = $recursive;
}

if (!empty($extra[‘type’]) && $extra[‘type’] == ‘custom’) {
//カスタム設定
return $this->find(‘custom’, $params);
}
else {
//普通のpagination設定
return $this->find(‘all’, $params);
}
}
[/php]

コントローラ側のpaginate設定では、以下の様にします。

[php]
//コントローラー内
$this->paginate = array(
‘conditions’ => array(‘各種条件’),
‘type’ => ‘custom’,
);
[/php]

これで問題なくカスタムpaginationの動作を切り替えることが出来るようになりました。めでたしめでたし。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.