【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()の第三引数を半角スペースにすると、非アクティブの時に非表示にできる。