Selaa lähdekoodia

ZF-5785: Zend_Paginator should offer setDefaultItemCountPerPage()

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16141 44c647ce-9c0f-0410-b52a-842ac1e357ba
norm2782 16 vuotta sitten
vanhempi
commit
92892e762a
2 muutettua tiedostoa jossa 60 lisäystä ja 10 poistoa
  1. 35 4
      library/Zend/Paginator.php
  2. 25 6
      tests/Zend/PaginatorTest.php

+ 35 - 4
library/Zend/Paginator.php

@@ -72,6 +72,13 @@ class Zend_Paginator implements Countable, IteratorAggregate
     protected static $_defaultScrollingStyle = 'Sliding';
 
     /**
+     * Default item count per page
+     *
+     * @var int
+     */
+    protected static $_defaultItemCountPerPage = 10;
+
+    /**
      * Scrolling style plugin loader
      *
      * @var Zend_Loader_PluginLoader
@@ -132,7 +139,7 @@ class Zend_Paginator implements Countable, IteratorAggregate
      *
      * @var integer
      */
-    protected $_itemCountPerPage = 10;
+    protected $_itemCountPerPage = null;
 
     /**
      * Number of pages
@@ -345,6 +352,26 @@ class Zend_Paginator implements Countable, IteratorAggregate
     }
 
     /**
+     * Get the default item count per page
+     *
+     * @return int
+     */
+    public static function getDefaultItemCountPerPage()
+    {
+        return self::$_defaultItemCountPerPage;
+    }
+
+    /**
+     * Set the default item count per page
+     *
+     * @param int $count
+     */
+    public static function setDefaultItemCountPerPage($count)
+    {
+        self::$_defaultItemCountPerPage = (int) $count;
+    }
+
+    /**
      * Sets a cache object
      *
      * @param Zend_Cache_Core $cache
@@ -637,6 +664,10 @@ class Zend_Paginator implements Countable, IteratorAggregate
      */
     public function getItemCountPerPage()
     {
+        if ($this->_itemCountPerPage === null) {
+            $this->_itemCountPerPage = self::getDefaultItemCountPerPage();
+        }
+
         return $this->_itemCountPerPage;
     }
 
@@ -926,7 +957,7 @@ class Zend_Paginator implements Countable, IteratorAggregate
     /**
      * Makes an Id for the cache
      * Depends on the adapter object and the page number
-     * 
+     *
      * Used to store item in cache from that Paginator instance
      *  and that current page
      *
@@ -940,11 +971,11 @@ class Zend_Paginator implements Countable, IteratorAggregate
         }
         return self::CACHE_TAG_PREFIX . $page . '_' . $this->_getCacheInternalId();
     }
-    
+
     /**
      * Get the internal cache id
      * Depends on the adapter and the item count per page
-     * 
+     *
      * Used to tag that unique Paginator instance in cache
      *
      * @return string

+ 25 - 6
tests/Zend/PaginatorTest.php

@@ -714,7 +714,7 @@ class Zend_PaginatorTest extends PHPUnit_Framework_TestCase
         );
         $this->assertEquals($expected, $pageItems);
     }
-    
+
     public function testClearPageItemCache()
     {
         $this->_paginator->setCurrentPageNumber(1)->getCurrentItems();
@@ -755,25 +755,25 @@ class Zend_PaginatorTest extends PHPUnit_Framework_TestCase
     {
         $this->_paginator->setCurrentPageNumber(1)->getCurrentItems();
         $pageItems = $this->_paginator->setItemCountPerPage(5)->getCurrentItems();
-        
+
         $expected = new ArrayIterator(range(1, 5));
         $this->assertEquals($expected, $pageItems);
 
         $pageItems = $this->_paginator->getItemsByPage(2);
         $expected = new ArrayIterator(range(6, 10));
         $this->assertEquals($expected, $pageItems);
-        
+
         // change the inside Paginator scale
         $pageItems = $this->_paginator->setItemCountPerPage(8)->setCurrentPageNumber(3)->getCurrentItems();
-        
+
         $pageItems = $this->_paginator->getPageItemCache();
         $expected = array(3 => new ArrayIterator(range(17, 24)));
         $this->assertEquals($expected, $pageItems);
-        
+
         // get back to already cached data
         $this->_paginator->setItemCountPerPage(5);
         $pageItems = $this->_paginator->getPageItemCache();
-        $expected =array(1 => new ArrayIterator(range(1, 5)), 
+        $expected =array(1 => new ArrayIterator(range(1, 5)),
                          2 => new ArrayIterator(range(6, 10)));
         $this->assertEquals($expected, $pageItems);
     }
@@ -811,4 +811,23 @@ class Zend_PaginatorTest extends PHPUnit_Framework_TestCase
 
         return $data;
     }
+
+    /**
+     * @group ZF-5785
+     */
+    public function testGetSetDefaultItemCountPerPage()
+    {
+        Zend_Paginator::setConfig(new Zend_Config(array()));
+
+        $paginator = Zend_Paginator::factory(range(1, 10));
+        $this->assertEquals(10, $paginator->getItemCountPerPage());
+
+        Zend_Paginator::setDefaultItemCountPerPage(20);
+        $this->assertEquals(20, Zend_Paginator::getDefaultItemCountPerPage());
+
+        $paginator = Zend_Paginator::factory(range(1, 10));
+        $this->assertEquals(20, $paginator->getItemCountPerPage());
+
+        $this->_restorePaginatorDefaults();
+    }
 }