public function PagererManager::getPagererUpdatedParameters in Pagerer 8.2
Gets the URL query parameter array of a pager link.
Parameters
Drupal\pagerer\Pagerer $pager: The pager object.
array $parameters: An associative array of query string parameters to append to the pager links.
int $page: The target page.
array $adaptive_keys: The adaptive keys array, in the format 'L,R,X', where L is the adaptive lock to left page, R is the adaptive lock to right page, and X is the adaptive center lock for calculation of neighborhood.
Return value
array The updated array of query parameters.
2 calls to PagererManager::getPagererUpdatedParameters()
- PagererManager::getHref in src/
PagererManager.php - Gets a pager link.
- PagererManager::getUpdatedParameters in src/
PagererManager.php - Gets the URL query parameter array of a pager link.
File
- src/
PagererManager.php, line 109
Class
- PagererManager
- Provides a manager for Pagerer, as an extension of core's PagerManager.
Namespace
Drupal\pagererCode
public function getPagererUpdatedParameters(Pagerer $pager, array $parameters, $page, array $adaptive_keys = []) : array {
$max = $this
->getMaxPagerElementId();
// Build the 'page' and 'page_ak' query parameter elements.
// 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.
$page_el = [];
$page_ak = [];
for ($i = 0; $i <= $max; $i++) {
if (isset($this->pagers[$i])) {
if ($i === $pager
->getElement()) {
$page_el[$i] = is_string($page) ? $page : $this
->pageIndexToUrl($page);
$page_ak[$i] = $this
->adaptiveKeysToUrl($adaptive_keys, $this->pagers[$i]
->getLastPage());
}
else {
$page_el[$i] = $this
->pageIndexToUrl($this->pagers[$i]
->getCurrentPage());
$page_ak[$i] = $this
->adaptiveKeysToUrl($this->pagers[$i]
->getAdaptiveKeys(), $this->pagers[$i]
->getLastPage());
}
}
else {
$page_el[$i] = NULL;
$page_ak[$i] = NULL;
}
}
// Build the 'page' and 'page_ak' fragments, removing unneeded trailing
// keys.
while (end($page_el) === NULL) {
array_pop($page_el);
}
while (end($page_ak) === NULL) {
array_pop($page_ak);
}
if (!$this->querystringOverride) {
// Legacy URL format.
$parameters[$this->querystringKey] = implode(',', $page_el);
if (!empty($page_ak)) {
$parameters['page_ak'] = implode(',', $page_ak);
}
}
else {
// Pagerer URL format.
$page = implode(PagererParameters::VALUE_SEPARATOR, $page_el);
if (!empty($page_ak)) {
$ak = implode(PagererParameters::VALUE_SEPARATOR, $page_ak);
}
$parameters[$this->querystringKey] = $page . (isset($ak) ? PagererParameters::ITEM_SEPARATOR . 'ak' . PagererParameters::ITEM_SEPARATOR . $ak : NULL);
}
// Merge the updated pager query parameters, with any parameters coming from
// the current request. In case of collision, current parameters take
// precedence over the request ones.
if ($current_request_query = $this->pagerParams
->getQueryParameters()) {
$parameters = array_merge($current_request_query, $parameters);
}
// Explicitly remove the segments if not relevant.
if ($this->querystringKey !== 'page') {
unset($parameters['page']);
unset($parameters['page_ak']);
}
if ($this->querystringOverride && empty($page_el) && empty($page_ak)) {
unset($parameters[$this->querystringKey]);
}
return $parameters;
}