extra_pagination-8.x-1.0/extra_pagination.module

extra_pagination.module
<?php

/**
 * @file
 * Adds a new set of pager items to the full pager.
 */

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Drupal\Core\Template\Attribute;

/**
 * Implements hook_help().
 */
function extra_pagination_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    case 'help.page.extra_pagination':
      $output = '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Extra Pagination is a very simple module that provides a new set of pager items between the last visible pager link and the maximum pager number. This is mainly done for SEO reasons to make us reach any page in 3-4 clicks maximum. Suggestions and feature requests are welcome.') . '</p>';
      return $output;
  }
  return '';
}

/**
 * Implements hook_theme_registry_alter
 */
function extra_pagination_theme_registry_alter(&$theme_registry) {
  $module_path = \Drupal::service('extension.list.module')->getPath('extra_pagination');
  $theme_registry['pager']['path'] = $module_path . '/templates';
}

/**
 * Implements template_preprocess_pager().
 */
function extra_pagination_preprocess_pager(&$variables) {
  $pager_manager = \Drupal::service('pager.manager');
  $element = $variables['pager']['#element'];
  $parameters = $variables['pager']['#parameters'] ?? [];
  $quantity = $variables['pager']['#quantity'] ?? 9;

  $pager = $pager_manager->getPager($element);
  if (!$pager || $pager->getTotalPages() <= 1) {
    // No pager needed if there is only one page.
    return;
  }


  $current_page = $pager->getCurrentPage();
  $total_pages = $pager->getTotalPages();
  $tags = $variables['pager']['#tags'] ?? [];
  $route_name = $variables['pager']['#route_name'];
  $route_parameters = $variables['pager']['#route_parameters'] ?? [];


  $variables['items'] = [];
  $variables['ellipses'] = [];
  $variables['current'] = $current_page + 1;

  // Add "First" and "Previous" links.
  if ($current_page > 0) {
    $variables['items']['first'] = [
      'href' => Url::fromRoute($route_name, $route_parameters, [
        'query' => $pager_manager->getUpdatedParameters($parameters, $element, 0),
      ])->toString(),
      'text' => $tags[0] ?? t('First'),
      'attributes' => new Attribute(),
    ];
    $variables['items']['previous'] = [
      'href' => Url::fromRoute($route_name, $route_parameters, [
        'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page - 1),
      ])->toString(),
      'text' => $tags[1] ?? t('Previous'),
      'attributes' => new Attribute(),
    ];
  }

  // Add numbered page links.
  $start = max(1, $current_page + 1 - ceil($quantity / 2));
  $end = min($total_pages, $start + $quantity - 1);

  if ($start > 1) {
    $variables['ellipses']['previous'] = TRUE;
  }

  for ($i = $start; $i <= $end; $i++) {
    $variables['items']['pages'][$i] = [
      'href' => Url::fromRoute($route_name, $route_parameters, [
        'query' => $pager_manager->getUpdatedParameters($parameters, $element, $i - 1),
      ])->toString(),
      'text' => $i,
      'attributes' => new Attribute(),
    ];
  }

  if ($end < $total_pages) {
    $variables['ellipses']['next'] = TRUE;
  }

  // Add "Next" and "Last" links.
  if ($current_page < $total_pages - 1) {
    $variables['items']['next'] = [
      'href' => Url::fromRoute($route_name, $route_parameters, [
        'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page + 1),
      ])->toString(),
      'text' => $tags[3] ?? t('Next'),
      'attributes' => new Attribute(),
    ];
    $variables['items']['last'] = [
      'href' => Url::fromRoute($route_name, $route_parameters, [
        'query' => $pager_manager->getUpdatedParameters($parameters, $element, $total_pages - 1),
      ])->toString(),
      'text' => $tags[4] ?? t('Last'),
      'attributes' => new Attribute(),
    ];
  }

  // Calculate various markers within this pager piece:
  // Middle is used to "center" pages around the current page.
  $pager_middle = ceil($quantity / 2);
  // last is the last page listed by this pager piece (re quantity).
  $pager_last = $current_page + $quantity - $pager_middle;
  // max is the maximum page number.
  $pager_max = $pager->getTotalPages();


  require_once __DIR__ . "/includes/pager.inc";
  $variables['items']['extra'] = pager_extra_pages($pager_last, $pager_max, $route_parameters, $parameters, $element);
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc