/** * Render the page navigation * * @param Zym_Paginate_Abstract $paginate * @param int $limit * @return string */ protected function _renderPages(Zym_Paginate_Abstract $paginate) { $xhtml = ''; $currentPageNumber = $paginate->getCurrentPageNumber(); $centerOffset = floor($this->_pageLimit / 2); $lastPageNumber = $paginate->getPageCount(); if ($currentPageNumber <= $centerOffset) { $startNumber = 1; $endNumber = $this->_pageLimit; } else { if ($currentPageNumber >= $lastPageNumber - $centerOffset) { $startNumber = $lastPageNumber - $this->_pageLimit + 1; $endNumber = $lastPageNumber; } else { $startNumber = $currentPageNumber - $centerOffset; if ($this->_pageLimit % 2 == 0) { $startNumber++; } $endNumber = $currentPageNumber + $centerOffset; } } for ($i = $startNumber; $i <= $endNumber; $i++) { $pageLocation = array_merge($this->_targetLocation, array($this->_currentPageAttrib => $i)); if ($i == $currentPageNumber) { $xhtml .= $this->_renderActiveListItem($pageLocation, $i); } else { $xhtml .= $this->_renderListItem($pageLocation, $i); } } return $xhtml; }