Inheritance: extends Common\Core\Twig\BaseTwigTemplate
Ejemplo n.º 1
0
 /**
  * Parse pagination
  */
 protected function parsePagination()
 {
     // init var
     $pagination = null;
     $showFirstPages = false;
     $showLastPages = false;
     $useQuestionMark = true;
     // validate pagination array
     switch (true) {
         case !isset($this->pagination['limit']):
             throw new FrontendException('no limit in the pagination-property.');
         case !isset($this->pagination['offset']):
             throw new FrontendException('no offset in the pagination-property.');
         case !isset($this->pagination['requested_page']):
             throw new FrontendException('no requested_page available in the pagination-property.');
         case !isset($this->pagination['num_items']):
             throw new FrontendException('no num_items available in the pagination-property.');
         case !isset($this->pagination['num_pages']):
             throw new FrontendException('no num_pages available in the pagination-property.');
         case !isset($this->pagination['url']):
             throw new FrontendException('no URL available in the pagination-property.');
     }
     // should we use a questionmark or an ampersand
     if (mb_strpos($this->pagination['url'], '?') !== false) {
         $useQuestionMark = false;
     }
     // no pagination needed
     if ($this->pagination['num_pages'] < 1) {
         return;
     }
     // populate count fields
     $pagination['num_pages'] = $this->pagination['num_pages'];
     $pagination['current_page'] = $this->pagination['requested_page'];
     // as long as we are below page 5 we should show all pages starting from 1
     if ($this->pagination['requested_page'] < 6) {
         // init vars
         $pagesStart = 1;
         $pagesEnd = $this->pagination['num_pages'] >= 6 ? 6 : $this->pagination['num_pages'];
         // show last pages
         if ($this->pagination['num_pages'] > 5) {
             $showLastPages = true;
         }
     } elseif ($this->pagination['requested_page'] >= $this->pagination['num_pages'] - 4) {
         // as long as we are 5 pages from the end we should show all pages till the end
         $pagesStart = $this->pagination['num_pages'] - 5;
         $pagesEnd = $this->pagination['num_pages'];
         // show first pages
         if ($this->pagination['num_pages'] > 5) {
             $showFirstPages = true;
         }
     } else {
         // page 7
         $pagesStart = $this->pagination['requested_page'] - 2;
         $pagesEnd = $this->pagination['requested_page'] + 2;
         $showFirstPages = true;
         $showLastPages = true;
     }
     // show previous
     if ($this->pagination['requested_page'] > 1) {
         // build URL
         if ($useQuestionMark) {
             $url = $this->pagination['url'] . '?page=' . ($this->pagination['requested_page'] - 1);
         } else {
             $url = $this->pagination['url'] . '&amp;page=' . ($this->pagination['requested_page'] - 1);
         }
         // set
         $pagination['show_previous'] = true;
         $pagination['previous_url'] = $url;
     }
     // show first pages?
     if ($showFirstPages) {
         // init var
         $pagesFirstStart = 1;
         $pagesFirstEnd = 1;
         // loop pages
         for ($i = $pagesFirstStart; $i <= $pagesFirstEnd; ++$i) {
             // build URL
             if ($useQuestionMark) {
                 $url = $this->pagination['url'] . '?page=' . $i;
             } else {
                 $url = $this->pagination['url'] . '&amp;page=' . $i;
             }
             // add
             $pagination['first'][] = array('url' => $url, 'label' => $i);
         }
     }
     // build array
     for ($i = $pagesStart; $i <= $pagesEnd; ++$i) {
         // init var
         $current = $i == $this->pagination['requested_page'];
         // build URL
         if ($useQuestionMark) {
             $url = $this->pagination['url'] . '?page=' . $i;
         } else {
             $url = $this->pagination['url'] . '&amp;page=' . $i;
         }
         // add
         $pagination['pages'][] = array('url' => $url, 'label' => $i, 'current' => $current);
     }
     // show last pages?
     if ($showLastPages) {
         // init var
         $pagesLastStart = $this->pagination['num_pages'];
         $pagesLastEnd = $this->pagination['num_pages'];
         // loop pages
         for ($i = $pagesLastStart; $i <= $pagesLastEnd; ++$i) {
             // build URL
             if ($useQuestionMark) {
                 $url = $this->pagination['url'] . '?page=' . $i;
             } else {
                 $url = $this->pagination['url'] . '&amp;page=' . $i;
             }
             // add
             $pagination['last'][] = array('url' => $url, 'label' => $i);
         }
     }
     // show next
     if ($this->pagination['requested_page'] < $this->pagination['num_pages']) {
         // build URL
         if ($useQuestionMark) {
             $url = $this->pagination['url'] . '?page=' . ($this->pagination['requested_page'] + 1);
         } else {
             $url = $this->pagination['url'] . '&amp;page=' . ($this->pagination['requested_page'] + 1);
         }
         // set
         $pagination['show_next'] = true;
         $pagination['next_url'] = $url;
     }
     // multiple pages
     $pagination['multiple_pages'] = $pagination['num_pages'] == 1 ? false : true;
     // assign pagination
     $this->tpl->assign('pagination', $pagination);
 }