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页面的首部.
如果忽略了,那么很遗憾,您的分页显示将出现异常.
分享到:
相关推荐
一旦`$paginate`配置就绪,就可以通过调用`Controller::paginate()`方法来获取分页后的数据: ```php $articles = $this->paginate($this->Articles); $this->set(compact('articles')); ``` 此外,`...
在本教程中,我们将深入探讨如何使用CakePHP框架开发一个简单的CMS(内容管理系统)系统。首先,我们将从创建文章控制器开始,它是整个CMS的核心组件之一。 ### 创建文章控制器 在CakePHP中,控制器(Controllers...
CakePHP 2.1.1 提供了丰富的控制器辅助方法,如 redirect() 用于页面跳转,render() 用于渲染视图,以及 paginate() 用于实现分页功能,这些都极大地简化了开发流程。 除此之外,CakePHP 2.1.1 引入了一些关键改进...
### CakePHP 1.2 快查表知识点详解 #### 一、自定义查询类型 ...以上内容涵盖了CakePHP 1.2中模型、控制器和视图的主要知识点,对于开发人员来说,熟悉这些方法和属性可以帮助更高效地进行Web应用开发。
CakePHP是基于MVC(模型-视图-控制器)架构的PHP开发框架,它提供了一套强大的工具来简化Web应用的开发。 首先,让我们了解`filter`和`search`的概念。在Web应用中,过滤通常指的是根据特定条件筛选数据,而搜索则...