Update PaginatorHelper::beforeRender to merge request->query with url options

This commit is contained in:
Takayuki Miwa 2012-03-03 13:46:15 +09:00
parent 4f2d7b5f9a
commit 1475e87b38
2 changed files with 79 additions and 8 deletions

View file

@ -661,11 +661,12 @@ class PaginatorHelperTest extends CakeTestCase {
$this->Paginator->request->params['pass'] = array(2); $this->Paginator->request->params['pass'] = array(2);
$this->Paginator->request->params['named'] = array('foo' => 'bar'); $this->Paginator->request->params['named'] = array('foo' => 'bar');
$this->Paginator->request->query = array('x' => 'y');
$this->Paginator->beforeRender('posts/index'); $this->Paginator->beforeRender('posts/index');
$result = $this->Paginator->sort('title'); $result = $this->Paginator->sort('title');
$expected = array( $expected = array(
'a' => array('href' => '/articles/index/2/page:1/foo:bar/sort:title/direction:asc'), 'a' => array('href' => '/articles/index/2/page:1/foo:bar/sort:title/direction:asc?x=y'),
'Title', 'Title',
'/a' '/a'
); );
@ -675,24 +676,91 @@ class PaginatorHelperTest extends CakeTestCase {
$expected = array( $expected = array(
array('span' => array('class' => 'current')), '1', '/span', array('span' => array('class' => 'current')), '1', '/span',
' | ', ' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/page:2/foo:bar')), '2', '/a', '/span', array('span' => array()), array('a' => array('href' => '/articles/index/2/page:2/foo:bar?x=y')), '2', '/a', '/span',
' | ', ' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/page:3/foo:bar')), '3', '/a', '/span', array('span' => array()), array('a' => array('href' => '/articles/index/2/page:3/foo:bar?x=y')), '3', '/a', '/span',
' | ', ' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/page:4/foo:bar')), '4', '/a', '/span', array('span' => array()), array('a' => array('href' => '/articles/index/2/page:4/foo:bar?x=y')), '4', '/a', '/span',
' | ', ' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/page:5/foo:bar')), '5', '/a', '/span', array('span' => array()), array('a' => array('href' => '/articles/index/2/page:5/foo:bar?x=y')), '5', '/a', '/span',
' | ', ' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/page:6/foo:bar')), '6', '/a', '/span', array('span' => array()), array('a' => array('href' => '/articles/index/2/page:6/foo:bar?x=y')), '6', '/a', '/span',
' | ', ' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/page:7/foo:bar')), '7', '/a', '/span', array('span' => array()), array('a' => array('href' => '/articles/index/2/page:7/foo:bar?x=y')), '7', '/a', '/span',
); );
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
$result = $this->Paginator->next('Next'); $result = $this->Paginator->next('Next');
$expected = array( $expected = array(
'span' => array('class' => 'next'), 'span' => array('class' => 'next'),
'a' => array('href' => '/articles/index/2/page:2/foo:bar', 'rel' => 'next'), 'a' => array('href' => '/articles/index/2/page:2/foo:bar?x=y', 'rel' => 'next'),
'Next',
'/a',
'/span'
);
$this->assertTags($result, $expected);
}
/**
* testPassedArgsMergingWithUrlOptionsParamTypeQuerystring method
*
* @return void
*/
public function testPassedArgsMergingWithUrlOptionsParamTypeQuerystring() {
Router::reload();
Router::parse('/');
Router::setRequestInfo(array(
array('plugin' => null, 'controller' => 'articles', 'action' => 'index', 'pass' => array('2'), 'named' => array('foo' => 'bar'), 'url' => array('url' => 'articles/index/2/foo:bar')),
array('base' => '/', 'here' => '/articles/', 'webroot' => '/')
));
$this->Paginator->request->params['paging'] = array(
'Article' => array(
'page' => 1, 'current' => 3, 'count' => 13,
'prevPage' => false, 'nextPage' => true, 'pageCount' => 8,
'options' => array(
'page' => 1,
'order' => array(),
'conditions' => array()
),
'paramType' => 'querystring'
)
);
$this->Paginator->request->params['pass'] = array(2);
$this->Paginator->request->params['named'] = array('foo' => 'bar');
$this->Paginator->request->query = array('x' => 'y');
$this->Paginator->beforeRender('posts/index');
$result = $this->Paginator->sort('title');
$expected = array(
'a' => array('href' => '/articles/index/2/foo:bar?x=y&page=1&sort=title&direction=asc'),
'Title',
'/a'
);
$this->assertTags($result, $expected);
$result = $this->Paginator->numbers();
$expected = array(
array('span' => array('class' => 'current')), '1', '/span',
' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=2')), '2', '/a', '/span',
' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=3')), '3', '/a', '/span',
' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=4')), '4', '/a', '/span',
' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=5')), '5', '/a', '/span',
' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=6')), '6', '/a', '/span',
' | ',
array('span' => array()), array('a' => array('href' => '/articles/index/2/foo:bar?x=y&page=7')), '7', '/a', '/span',
);
$this->assertTags($result, $expected);
$result = $this->Paginator->next('Next');
$expected = array(
'span' => array('class' => 'next'),
'a' => array('href' => '/articles/index/2/foo:bar?x=y&page=2', 'rel' => 'next'),
'Next', 'Next',
'/a', '/a',
'/span' '/span'

View file

@ -109,6 +109,9 @@ class PaginatorHelper extends AppHelper {
*/ */
public function beforeRender($viewFile) { public function beforeRender($viewFile) {
$this->options['url'] = array_merge($this->request->params['pass'], $this->request->params['named']); $this->options['url'] = array_merge($this->request->params['pass'], $this->request->params['named']);
if (!empty($this->request->query)) {
$this->options['url']['?'] = $this->request->query;
}
parent::beforeRender($viewFile); parent::beforeRender($viewFile);
} }