CakePHP中paginate是一个处理分页数据的函数.
配合helper(有关信息请关注后续文章)里的Paginator方法,可以很容易的做出分页列表页面.
首先:覆盖paginate变量,paginate变量的绍介请看前一篇(
CakePHP开发之控制器-Controller).
它包含了条件,排序,分组,限制,表间关系等等...
如:
$this->paginate = array('conditions'=>array('`Blog`.`user_id`'=>$user_id,'`Blog`.`status`'=>1),
'order' =>array('`Blog`.`modified`' => 'DESC'),
'limit' => 10
);
它将显示user_id为$user_id,状态为1,的所有blog记录,且每页显示10条.
接下来,我们应该注意一些细节:如,您可能想让Blog的某些关联Model在此刻取消,那么,Model如何解除关联(unbind)呢?
我注意到,通常的在find方法里很有用的unbind方法并不起作用,
$this->Blog->unbind(array('belongsTo'=>array('BlogClass')));
原因是在find里在得到数据后,find会用model->resetAssociations();
把所有关联(Association)还原.
而paginate函数使用了两次find:一次是得到总数count,另一次才是得到分页显示的相关数据.
因此,给unbind的第二个参数里赋上'假'值.
如果unbind的第二个参数是true,cakephp会把需要解除关联的数据库保存到 model->__backAssociation里,当运行model->resetAssociations();会从 model->__backAssociation把相关的关联的数据还原.
解决:
$this->Blog->unbind(array('belongsTo'=>array('BlogClass')),false);
最后,在对应的view文件内,采用默认加载的helper变量和方法可以容易的搭建起view框架.
如:
<?php
echo $paginator->first(__('first', true), array(), null);
echo $paginator->prev(__('previous', true), array(), null);
echo $paginator->numbers();
echo $paginator->next(__('next', true), array(), null);
echo $paginator->last(__('last', true), array(), null);?>
注意:如果,你将条件写入了函数调用的参数内,那么,为了与helper相对应,你必须在view声明:如:
$paginator->options(array('url' =>$blogs['Blog']['user_id']));
此段code必须写在view页面的首部.
如果忽略了,那么很遗憾,您的分页显示将出现异常.