protected function Progressive::buildProgressivePageList in Pagerer 8
Same name and namespace in other branches
- 8.2 src/Plugin/pagerer/Progressive.php \Drupal\pagerer\Plugin\pagerer\Progressive::buildProgressivePageList()
 
Return an array of pages progressively more distant from current.
Parameters
array $pages: Array of pages already enlisted, to prevent override.
int $scale_factor: Scale factor to be used in the progressive series.
int $ratio: Ratio to be used in the progressive series.
int $limit: (Optional) limit the quantity of pages enlisted.
Return value
array render array of pages items.
1 call to Progressive::buildProgressivePageList()
- Progressive::buildPageList in src/
Plugin/ pagerer/ Progressive.php  - Return an array of pages.
 
File
- src/
Plugin/ pagerer/ Progressive.php, line 109  
Class
- Progressive
 - Pager style with links to pages progressively more distant from current.
 
Namespace
Drupal\pagerer\Plugin\pagererCode
protected function buildProgressivePageList(array $pages, $scale_factor, $ratio, $limit = NULL) {
  $current = $this->pager
    ->getCurrentPage();
  $total = $this->pager
    ->getTotalPages();
  $last = $this->pager
    ->getLastPage();
  // Avoid endless loop in converging series.
  if ($ratio < 1) {
    $ratio = 1;
  }
  $offset = 0;
  for ($i = 0; TRUE; $i++) {
    // Breaks if limit reached.
    if ($limit and $i > $limit - 1) {
      break;
    }
    // Offset for this cycle.
    $offset = intval($scale_factor * pow($ratio, $i));
    // Breaks if offset > than total pages.
    if ($offset > $total) {
      break;
    }
    // Negative offset.
    $target = $current - $offset;
    if ($target > 0 && !isset($pages[$target])) {
      $pages[$target] = $this
        ->getPageItem(-$offset, $this
        ->getOption('progr_links'), TRUE);
    }
    // Positive offset.
    $target = $current + $offset;
    if ($target < $last && !isset($pages[$target])) {
      $pages[$target] = $this
        ->getPageItem($offset, $this
        ->getOption('progr_links'), TRUE);
    }
  }
  return $pages;
}