tome-8.x-1.x-dev/modules/tome_static/src/EventSubscriber/ExcludePathSubscriber.php

modules/tome_static/src/EventSubscriber/ExcludePathSubscriber.php
<?php

namespace Drupal\tome_static\EventSubscriber;

use Drupal\Core\Site\Settings;
use Drupal\tome_static\Event\CollectPathsEvent;
use Drupal\tome_static\Event\TomeStaticEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Excludes a paths from static generation.
 *
 * @internal
 */
class ExcludePathSubscriber implements EventSubscriberInterface {

  /**
   * A hard-coded list of paths to always exclude.
   *
   * @var array
   */
  const EXCLUDED_PATHS = [
    '/big_pipe/no-js',
    '/filter/tips',
    '/history/get_node_read_timestamps',
    '/machine_name/transliterate',
    '/system/files',
    '/system/temporary',
    '/system/timezone',
    '/batch',
    '/session/token',
    '/user/password',
    '/user/login',
    '/user/login_status',
    '/views/ajax',
    '/user/register',
    '/system/4xx',
    '/system/404',
    '/system/403',
    '/system/401',
    '/comments/render_new_comments_node_links',
    '/media/oembed',
  ];

  /**
   * Reacts to a collect paths event.
   *
   * @param \Drupal\tome_static\Event\CollectPathsEvent $event
   *   The collect paths event.
   */
  public function collectPaths(CollectPathsEvent $event) {
    $excluded_paths = self::getExcludedPaths();
    $paths = $event->getPaths(TRUE);
    foreach ($paths as $path => $metadata) {
      if (in_array($path, $excluded_paths, TRUE) || (isset($metadata['original_path']) && in_array($metadata['original_path'], $excluded_paths, TRUE))) {
        unset($paths[$path]);
      }
    }
    $event->replacePaths($paths);
  }

  /**
   * Returns paths excluded globally and per site.
   *
   * @return array
   *   An array of excluded paths.
   */
  public static function getExcludedPaths() {
    $excluded_paths = self::EXCLUDED_PATHS;
    $site_paths = Settings::get('tome_static_path_exclude', []);
    if (is_array($site_paths)) {
      $excluded_paths = array_merge(self::EXCLUDED_PATHS, $site_paths);
    }
    return $excluded_paths;
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[TomeStaticEvents::COLLECT_PATHS][] = ['collectPaths', -2];
    return $events;
  }

}

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

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