【CakePHP2.x】containを含んだpaginateの実装

例えば、

  • User→Company
  • User→Country

のようなつながりのあるモデルのみを参照したい場合、

Controller側

<?php

public $components = array('Paginator');

…
…
…


$findParams = array(
  'contain'    => array(
                    ‘Company’,
                    ‘Country’,
                  ),
  'conditions' => array(
                    ‘User.enabled’ => 1,
                    ‘User.type' =>1,
                    'User.type' => 'outline',
  ),
  'limit' => 10,
  'paramType' => 'querystring',
);
$this->paginate = $findParams;
$this->set(‘result’, $this->paginate(’User’));


「User.typeが1または2」という条件を入れる場合は、以下のようにする。

'conditions' => array(
                    'OR' => array(
                                 array(
                                   ‘User.type' =>1
                                 ),
                                 array(
                                   ‘User.type' =>2
                                 ),
                             ),
)

contain される側に条件を入れたい場合は、以下のようにする。

'contain' => array(
    ‘モデル名’ => array(
        ‘conditions’ => array(
            ‘モデル名.カラム名’ => $引数
        ) 
    )
)

View側

<?php echo $this->paginator->prev('« 前のページ ', array('url' => $this->passedArgs,), null, array('class' => 'disabled'));?>
<?php
print $this->Paginator->numbers(array(
    'url' => $this->passedArgs,
    'before'=>'←←←',
    'after'=>'→→→',
    'separator'=>'',
    'currentClass'=>'redback',
    'class'=>'block',
    'modulus'=>6,
    'first'=>5,
    'last'=>2,
    'tag'=>'s',
    'ellipsis' => '...'
));
?>
<?php echo $this->paginator->next(' 次のページ »', array('url' => $this->passedArgs,), null, array('class' => 'disabled'));?>

タグの種類等も自由に設定可能。

<?php
          echo $this->paginator->prev('« 前のページ ', array('url' => $this->passedArgs, 'class' => 'prev', 'tag'=>'li'), ' ', array('class' => 'disabled'));
          print $this->Paginator->numbers(array(
              'url' => $this->passedArgs,
              'separator'=>' ',
              'currentClass'=>'active',
              'currentTag'=>'a',
              'class'=>'',
              'modulus'=>4,
              'tag'=>'li',
          ));

          echo $this->paginator->next(' 次のページ »', array('url' => $this->passedArgs, 'class' => 'next', 'tag'=>'li'), ' ', array('class' => 'disabled'));
?>

prev()やnext()の第三引数を半角スペースにすると、非アクティブの時に非表示にできる。