CakePHP开发之controller设置之paginate

本文详细介绍了CakePHP中paginate函数的使用方法,包括条件设置、排序、限制等,并提供了解除模型关联的方法及视图展示技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CakePHP中paginate是一个处理分页数据的函数.
配合helper(有关信息请关注后续文章)里的Paginator方法,可以很容易的做出分页列表页面.

[b]首先:[/b]覆盖paginate变量,paginate变量的绍介请看前一篇([url=http://lesorb.iteye.com/blog/746229]CakePHP开发之控制器-Controller[/url]).
它包含了条件,排序,分组,限制,表间关系等等...
如:

$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条.

[b]接下来,[/b]我们应该注意一些细节:如,您可能想让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);



[b]最后,[/b]在对应的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);?>
[b]注意:[/b]如果,你将条件写入了函数调用的参数内,那么,为了与helper相对应,你必须在view声明:如:

$paginator->options(array('url' =>$blogs['Blog']['user_id']));

[b]
此段code必须写在view页面的首部[/b].

如果忽略了,那么很遗憾,您的分页显示将出现异常.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值