flexible_views-2.0.1/flexible_views.module

flexible_views.module
<?php

/**
 * @file
 * Contains flexible_views.module.
 */

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\views\Views;
use Drupal\Core\Url;

/**
 * Implements hook_help().
 */
function flexible_views_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the flexible_views module.
    case 'help.page.flexible_views':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Adds better usability and some improvements to Core Views module.') . '</p>';
      return $output;

    default:
  }
}

/**
 * Implements hook_theme().
 */
function flexible_views_theme() {
  return [
    'flexible_views_style_plugin_flexible_table' => [
      'render element' => 'form',
      'file' => 'flexible_views.theme.inc',
    ],
    'views_view_flexible_table' => [
      'render element' => 'form',
      'file' => 'flexible_views.theme.inc',
    ],
  ];
}

/**
 * Implements template_preprocess_pager().
 *
 * @todo This was updated in core.
 */
function flexible_views_preprocess_pager(&$variables) {
  $element = $variables['pager']['#element'];
  $parameters = $variables['pager']['#parameters'];
  $quantity = empty($variables['pager']['#quantity']) ? 0 : $variables['pager']['#quantity'];
  $route_name = $variables['pager']['#route_name'];
  $route_parameters = $variables['pager']['#route_parameters'] ?? [];

  /** @var \Drupal\Core\Pager\PagerManagerInterface $pager_manager */
  $pager_manager = \Drupal::service('pager.manager');
  $pager = $pager_manager->getPager($element);

  // Get the current view.
  $route = \Drupal::routeMatch()->getRouteObject();
  flexible_views_alter_pager_parameters($route, $parameters);

  if (isset($variables['items']['first'])) {
    $options = [
      'query' => $pager_manager->getUpdatedParameters($parameters, $element, 0),
    ];
    $variables['items']['first']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
  }

  if (isset($variables['items']['previous'])) {
    $current_page = $pager->getCurrentPage();
    $options = [
      'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page - 1),
    ];
    $variables['items']['previous']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
  }

  if (isset($variables["items"]["pages"])) {
    foreach ($variables["items"]["pages"] as $key => &$page) {
      $options = [
        'query' => $pager_manager->getUpdatedParameters($parameters, $element, $key - 1),
      ];
      $page['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
    }
  }

  if (isset($variables['items']['next'])) {
    $current_page = $pager->getCurrentPage();
    $options = [
      'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current_page + 1),
    ];
    $variables['items']['next']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
  }

  if (isset($variables['items']['last'])) {
    $pager_max = $pager->getTotalPages();
    $options = [
      'query' => $pager_manager->getUpdatedParameters($parameters, $element, $pager_max - 1),
    ];
    $variables['items']['last']['href'] = Url::fromRoute($route_name, $route_parameters, $options)->toString();
  }
}

/**
 * Implements template_preprocess_views_mini_pager().
 */
function flexible_views_preprocess_views_mini_pager(&$variables) {
  /** @var \Drupal\Core\Pager\PagerManagerInterface $pager_manager */
  $pager_manager = \Drupal::service('pager.manager');

  $element = $variables['element'];
  $parameters = $variables['parameters'];
  $pager = $pager_manager->getPager($element);

  // Get the current view.
  $route = \Drupal::routeMatch()->getRouteObject();
  flexible_views_alter_pager_parameters($route, $parameters);

  if (isset($variables['items']['previous'])) {
    $current = $pager->getCurrentPage();
    $options = [
      'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current - 1),
    ];
    $variables['items']['previous']['href'] = Url::fromRoute('<current>', [], $options)->toString();
  }

  if (isset($variables['items']['next'])) {
    $current = $pager->getCurrentPage();
    $options = [
      'query' => $pager_manager->getUpdatedParameters($parameters, $element, $current + 1),
    ];
    $variables['items']['next']['href'] = Url::fromRoute('<current>', [], $options)->toString();
  }
}

/**
 * Alter views mini pager.
 */
function flexible_views_alter_pager_parameters($route, &$parameters) {
  if ($route) {
    // Get view id and display id from route.
    $view_id = $route->getDefault('view_id');
    $display_id = $route->getDefault('display_id');

    if (!empty($view_id) && !empty($display_id)) {
      // Get the view by id.
      $view = Views::getView($view_id);
      $view->initHandlers();

      // Normally, all exposed filters are included in the parameters, so they
      // are included in the pager links as parameters. We only want this ones
      // to be active, which we have enables via the manual_selection exposed
      // filter plugin.
      if (isset($view->display_handler->options["exposed_form"]["type"]) && $view->display_handler->options["exposed_form"]["type"] === 'manual_selection') {
        $view_exposed_input = $view->getExposedInput();

        if (!empty($view_exposed_input)) {
          $new_parameters = [];

          foreach ($parameters as $parameter => $value) {
            if (array_key_exists($parameter, $view_exposed_input)) {
              $new_parameters[$parameter] = $value;
            }
          }

          $parameters = $new_parameters;
        }
        else {
          $parameters = [];
        }
      }
    }
  }
}

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

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