Browse Source

Reflect 'url' options to Pagenator::numbers()

Now Pagenator::numbers function can take url options like prev and
next().
Jun Nakashima 11 years ago
parent
commit
5335715f36

+ 5 - 3
src/View/Helper/PaginatorHelper.php

@@ -712,9 +712,10 @@ class PaginatorHelper extends Helper
             ]);
         }
 
+        $url = array_merge($options['url'], ['page' => $params['page']]);
         $out .= $templater->format('current', [
             'text' => $params['page'],
-            'url' => $this->generateUrl(['page' => $params['page']], $options['model']),
+            'url' => $this->generateUrl($url, $options['model']),
         ]);
 
         $start = $params['page'] + 1;
@@ -796,15 +797,16 @@ class PaginatorHelper extends Helper
         $out = '';
         $out .= $options['before'];
         for ($i = 1; $i <= $params['pageCount']; $i++) {
+            $url = array_merge($options['url'], ['page' => $i]);
             if ($i == $params['page']) {
                 $out .= $templater->format('current', [
                     'text' => $params['page'],
-                    'url' => $this->generateUrl(['page' => $params['page']], $options['model']),
+                    'url' => $this->generateUrl($url, $options['model']),
                 ]);
             } else {
                 $vars = [
                     'text' => $i,
-                    'url' => $this->generateUrl(['page' => $i], $options['model']),
+                    'url' => $this->generateUrl($url, $options['model']),
                 ];
                 $out .= $templater->format('number', $vars);
             }

+ 59 - 0
tests/TestCase/View/Helper/PaginatorHelperTest.php

@@ -1538,6 +1538,65 @@ class PaginatorHelperTest extends TestCase
     }
 
     /**
+     * Test that numbers() with url options.
+     *
+     * @return void
+     */
+    public function testNumbersWithUrlOptions()
+    {
+        $this->Paginator->request->params['paging'] = [
+            'Client' => [
+                'page' => 8,
+                'current' => 3,
+                'count' => 30,
+                'prevPage' => false,
+                'nextPage' => 2,
+                'pageCount' => 15,
+            ]
+        ];
+        $result = $this->Paginator->numbers(['url' => ['#' => 'foo']]);
+        $expected = [
+            ['li' => []], ['a' => ['href' => '/index?page=4#foo']], '4', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=5#foo']], '5', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=6#foo']], '6', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=7#foo']], '7', '/a', '/li',
+            ['li' => ['class' => 'active']], '<a href=""', '8', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=9#foo']], '9', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=10#foo']], '10', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=11#foo']], '11', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=12#foo']], '12', '/a', '/li',
+        ];
+        $this->assertHtml($expected, $result);
+
+        $this->Paginator->request->params['paging'] = [
+            'Client' => [
+                'page' => 3,
+                'current' => 10,
+                'count' => 48962,
+                'prevPage' => 1,
+                'nextPage' => 1,
+                'pageCount' => 4897,
+            ]
+        ];
+        $result = $this->Paginator->numbers([
+            'first' => 2,
+            'modulus' => 2,
+            'last' => 2,
+            'url' => ['foo' => 'bar']]);
+        $expected = [
+            ['li' => []], ['a' => ['href' => '/index?foo=bar']], '1', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=2&amp;foo=bar']], '2', '/a', '/li',
+            ['li' => ['class' => 'active']], '<a href=""', '3', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=4&amp;foo=bar']], '4', '/a', '/li',
+            ['li' => ['class' => 'ellipsis']], '...', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=4896&amp;foo=bar']], '4896', '/a', '/li',
+            ['li' => []], ['a' => ['href' => '/index?page=4897&amp;foo=bar']], '4897', '/a', '/li',
+        ];
+        $this->assertHtml($expected, $result);
+        $this->assertHtml($expected, $result);
+    }
+
+    /**
      * test numbers() with routing parameters.
      *
      * @return void