You are here

public function PagerManager::getUpdatedParameters in Drupal 8

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Pager/PagerManager.php \Drupal\Core\Pager\PagerManager::getUpdatedParameters()

Gets the URL query parameter array of a pager link.

Adds to or adjusts the 'page' URL query parameter so that if you follow the link, you'll get page $index for pager $element on the page.

The 'page' URL query parameter is a comma-delimited string, where each value is the target content page for the corresponding pager $element. For instance, if we have 5 pagers on a single page, and we want to have a link to a page that should display the 6th content page for the 3rd pager, and the 1st content page for all the other pagers, then the URL query will look like this: ?page=0,0,5,0,0 (page numbering starts at zero).

Parameters

array $query: An associative array of URL query parameters to add to.

int $element: An integer to distinguish between multiple pagers on one page.

int $index: The index of the target page, for the given element, in the pager array.

Return value

array The altered $query parameter array.

Overrides PagerManagerInterface::getUpdatedParameters

File

core/lib/Drupal/Core/Pager/PagerManager.php, line 65

Class

PagerManager
Provides a manager for pagers.

Namespace

Drupal\Core\Pager

Code

public function getUpdatedParameters(array $query, $element, $index) {

  // Build the 'page' query parameter. This is built based on the current
  // page of each pager element (or NULL if the pager is not set), with the
  // exception of the requested page index for the current element.
  $element_pages = [];
  $max = $this
    ->getMaxPagerElementId();
  for ($i = 0; $i <= $max; $i++) {
    $currentPage = ($pager = $this
      ->getPager($i)) ? $pager
      ->getCurrentPage() : NULL;
    $element_pages[] = $i == $element ? $index : $currentPage;
  }
  $query['page'] = implode(',', $element_pages);

  // Merge the query parameters passed to this function with the parameters
  // from the current request. In case of collision, the parameters passed
  // into this function take precedence.
  if ($current_query = $this->pagerParams
    ->getQueryParameters()) {
    $query = array_merge($current_query, $query);
  }
  return $query;
}