. */ Doctrine::autoload('Doctrine_Pager_Range'); /** * Doctrine_Pager_Range_Jumping * * @author Guilherme Blanco * @package Doctrine * @subpackage Pager * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @version $Revision$ * @link www.phpdoctrine.com * @since 1.0 */ class Doctrine_Pager_Range_Jumping extends Doctrine_Pager_Range { /** * @var int $chunkLength Chunk length to be returned */ private $chunkLength; /** * initialize * * Initialize Doctrine_Pager_Range_Jumping and does custom assignments * * @return void */ protected function initialize() { if (isset($this->options['chunk'])) { $this->setChunkLength($this->options['chunk']); } else { throw new Doctrine_Pager_Exception('Missing parameter \'chunk\' that must be define in options.'); } } /** * getChunkLength * * Returns the size of the chunk defined * * @return int Chunk length */ public function getChunkLength() { return $this->chunkLength; } /** * setChunkLength * * Defines the size of the chunk * * @param $chunkLength Chunk length * @return void */ protected function setChunkLength($chunkLength) { $this->chunkLength = $chunkLength; } /** * rangeAroundPage * * Calculate and returns an array representing the range around the current page * * @return array */ public function rangeAroundPage() { $pager = $this->getPager(); $page = $pager->getPage(); // Define initial assignments for StartPage and EndPage $startPage = $page - ($page - 1) % $this->getChunkLength(); $endPage = ($startPage + $this->getChunkLength()) - 1; // Check for EndPage out-range if ($endPage > $pager->getLastPage()) { $endPage = $pager->getLastPage(); } // No need to check for out-range in start, it will never happens return range($startPage, $endPage); } }