Exemplo n.º 1
0
 public function render($attributes = array())
 {
     $cur = $this->currentPage;
     $totalPages = $this->totalPages;
     if ($this->whenOverflow && $this->totalPages <= 1) {
         return "";
     }
     $pageStart = $cur > $this->rangeLimit ? $cur - $this->rangeLimit : 1;
     $pageEnd = $cur + $this->rangeLimit < $totalPages ? $cur + $this->rangeLimit : $totalPages;
     // Create inner elements and append to children element list.
     if ($this->showNavigator) {
         if ($cur > 2) {
             $li = $this->appendNavItem($this->firstPageLabel, 1, $cur == 1, $cur == 1);
             $li->getChildAt(0)->setAttributeValue('rel', 'first');
         }
         $li = $this->appendNavItem($this->prevPageLabel, $cur - 1, false, $cur == 1);
         $li->getChildAt(0)->setAttributeValue('rel', 'prev');
     }
     if ($this->showNearbyPages) {
         if ($cur > 5) {
             $this->appendNavItem(1, 1);
             $this->appendPageOmitNavItem('...');
         }
         for ($i = $pageStart; $i <= $pageEnd; $i++) {
             $this->appendNavItem($i, $i, $cur == $i);
         }
         if ($cur + 5 < $totalPages) {
             $this->appendPageOmitNavItem('...');
             $this->appendNavItem($totalPages, $totalPages);
         }
     }
     if ($this->showNavigator) {
         $li = $this->appendNavItem($this->nextPageLabel, $cur + 1, $cur >= $totalPages);
         $li->getChildAt(0)->setAttributeValue('rel', 'next');
         if ($totalPages > 1 && $cur < $totalPages) {
             $li = $this->appendNavItem($this->lastPageLabel, $this->totalPages);
             $li->getChildAt(0)->setAttributeValue('rel', 'last');
         }
     }
     $html = parent::render();
     if ($this->navWrapper) {
         $nav = new Element('nav');
         $nav->setAttributeValue('role', 'navigation');
         $nav->setAttributeValue('aria-label', "Pagination");
         $nav->setInnerHtml($html);
         return $nav->render($attributes);
     }
     return $html;
 }