mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
Allowing paginate to override the default find type for fetching records.
Set the find type as the first string parameter in your paginate settings: var $paginate = array('popular', ...); Check the test case for an example. git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7013 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
aaab0306aa
commit
62bf371aec
2 changed files with 18 additions and 2 deletions
|
@ -978,7 +978,10 @@ class Controller extends Object {
|
||||||
$conditions = array($conditions, $scope);
|
$conditions = array($conditions, $scope);
|
||||||
}
|
}
|
||||||
$recursive = $object->recursive;
|
$recursive = $object->recursive;
|
||||||
|
$type = 'all';
|
||||||
|
if (isset($defaults[0])) {
|
||||||
|
$type = array_shift($defaults);
|
||||||
|
}
|
||||||
$extra = array_diff_key($defaults, compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'));
|
$extra = array_diff_key($defaults, compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'));
|
||||||
if (method_exists($object, 'paginateCount')) {
|
if (method_exists($object, 'paginateCount')) {
|
||||||
$count = $object->paginateCount($conditions, $recursive);
|
$count = $object->paginateCount($conditions, $recursive);
|
||||||
|
@ -996,7 +999,7 @@ class Controller extends Object {
|
||||||
if (method_exists($object, 'paginate')) {
|
if (method_exists($object, 'paginate')) {
|
||||||
$results = $object->paginate($conditions, $fields, $order, $limit, $page, $recursive);
|
$results = $object->paginate($conditions, $fields, $order, $limit, $page, $recursive);
|
||||||
} else {
|
} else {
|
||||||
$results = $object->find('all', array_merge(compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'), $extra));
|
$results = $object->find($type, array_merge(compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive'), $extra));
|
||||||
}
|
}
|
||||||
$paging = array(
|
$paging = array(
|
||||||
'page' => $page,
|
'page' => $page,
|
||||||
|
|
|
@ -39,6 +39,14 @@ class ControllerPost extends CakeTestModel {
|
||||||
function beforeFind($query) {
|
function beforeFind($query) {
|
||||||
$this->lastQuery = $query;
|
$this->lastQuery = $query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function find($type, $options = array()) {
|
||||||
|
if ($type == 'popular') {
|
||||||
|
$conditions = array($this->name . '.' . $this->primaryKey => '> 1');
|
||||||
|
return parent::find('all', Set::merge($options, compact('conditions')));
|
||||||
|
}
|
||||||
|
return parent::find($type, $options);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class ControllerComment extends CakeTestModel {
|
class ControllerComment extends CakeTestModel {
|
||||||
var $name = 'ControllerComment';
|
var $name = 'ControllerComment';
|
||||||
|
@ -156,6 +164,11 @@ class ControllerTest extends CakeTestCase {
|
||||||
$this->assertEqual($Controller->params['paging']['ControllerPost']['page'], 1);
|
$this->assertEqual($Controller->params['paging']['ControllerPost']['page'], 1);
|
||||||
$this->assertEqual(Set::extract($result, '{n}.ControllerPost.id'), array(1, 2, 3));
|
$this->assertEqual(Set::extract($result, '{n}.ControllerPost.id'), array(1, 2, 3));
|
||||||
$this->assertFalse(!isset($Controller->ControllerPost->lastQuery['contain']));
|
$this->assertFalse(!isset($Controller->ControllerPost->lastQuery['contain']));
|
||||||
|
|
||||||
|
$Controller->paginate = array('ControllerPost' => array('popular', 'fields' => array('id', 'title')));
|
||||||
|
$result = $Controller->paginate('ControllerPost');
|
||||||
|
$this->assertEqual(Set::extract($result, '{n}.ControllerPost.id'), array(2, 3));
|
||||||
|
$this->assertEqual($Controller->ControllerPost->lastQuery['conditions'], array('ControllerPost.id' => '> 1'));
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDefaultPaginateParams() {
|
function testDefaultPaginateParams() {
|
||||||
|
|
Loading…
Reference in a new issue