wxt-8.x-3.011/modules/custom/wxt_ext/wxt_ext_breadcrumb/src/Breadcrumb/TaxonomyBreadcrumbBuilder.php
modules/custom/wxt_ext/wxt_ext_breadcrumb/src/Breadcrumb/TaxonomyBreadcrumbBuilder.php
<?php
namespace Drupal\wxt_ext_breadcrumb\Breadcrumb;
use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\system\PathBasedBreadcrumbBuilder;
use Drupal\Core\Access\AccessManagerInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Controller\TitleResolverInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Link;
use Drupal\Core\Path\CurrentPathStack;
use Drupal\Core\PathProcessor\InboundPathProcessorInterface;
use Drupal\Core\Path\PathValidator;
use Drupal\Core\Routing\RequestContext;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\path_alias\AliasManagerInterface;
use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
/**
* Taxonomy Breadcrumb Builder.
*/
class TaxonomyBreadcrumbBuilder extends PathBasedBreadcrumbBuilder {
use StringTranslationTrait;
/**
* The router request context.
*
* @var \Drupal\Core\Routing\RequestContext
*/
protected $context;
/**
* The menu link access service.
*
* @var \Drupal\Core\Access\AccessManagerInterface
*/
protected $accessManager;
/**
* The dynamic router service.
*
* @var \Symfony\Component\Routing\Matcher\RequestMatcherInterface
*/
protected $router;
/**
* The inbound path processor.
*
* @var \Drupal\Core\PathProcessor\InboundPathProcessorInterface
*/
protected $pathProcessor;
/**
* Site config object.
*
* @var \Drupal\Core\Config\Config
*/
protected $config;
/**
* The title resolver.
*
* @var \Drupal\Core\Controller\TitleResolverInterface
*/
protected $titleResolver;
/**
* The current user object.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $currentUser;
/**
* The language manager de.
*
* @var \Drupal\Core\Language\LanguageManager
*/
protected $languageManager;
/**
* The path validator.
*
* @var \Drupal\Core\Path\PathValidator
*/
protected $pathValidator;
/**
* The alias manager.
*
* @var \Drupal\path_alias\AliasManagerInterface
*/
protected $aliasManager;
/**
* Constructs the TaxonomyBreadcrumbBuilder.
*
* @param \Drupal\Core\Routing\RequestContext $context
* The router request context.
* @param \Drupal\Core\Access\AccessManagerInterface $access_manager
* The menu link access service.
* @param \Symfony\Component\Routing\Matcher\RequestMatcherInterface $router
* The dynamic router service.
* @param \Drupal\Core\PathProcessor\InboundPathProcessorInterface $path_processor
* The inbound path processor.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory service.
* @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver
* The title resolver service.
* @param \Drupal\Core\Session\AccountInterface $current_user
* The current user object.
* @param \Drupal\Core\Path\CurrentPathStack $current_path
* The current path.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager.
* @param \Drupal\Core\Path\PathValidator $pathValidator
* The path validator.
* @param \Drupal\path_alias\AliasManagerInterface $alias_manager
* The alias manager service.
*/
public function __construct(
RequestContext $context,
AccessManagerInterface $access_manager,
RequestMatcherInterface $router,
InboundPathProcessorInterface $path_processor,
ConfigFactoryInterface $config_factory,
TitleResolverInterface $title_resolver,
AccountInterface $current_user,
CurrentPathStack $current_path,
LanguageManagerInterface $language_manager,
PathValidator $pathValidator,
AliasManagerInterface $alias_manager) {
$this->context = $context;
$this->accessManager = $access_manager;
$this->router = $router;
$this->pathProcessor = $path_processor;
$this->config = $config_factory->get('system.site');
$this->titleResolver = $title_resolver;
$this->currentUser = $current_user;
$this->currentPath = $current_path;
$this->languageManager = $language_manager;
$this->pathValidator = $pathValidator;
$this->aliasManager = $alias_manager;
}
/**
* {@inheritdoc}
*/
public function applies(RouteMatchInterface $route_match) {
$parameters = $route_match->getParameters()->all();
$path = trim($this->context->getPathInfo(), '/');
$path_elements = explode('/', $path);
// Content type determination.
if (!empty($path_elements[1]) && $path_elements[1] == 'taxonomy') {
if (!empty($parameters['view_id']) &&
is_object($parameters['taxonomy_term']) &&
$parameters['taxonomy_term']->getEntityTypeId() == 'taxonomy_term') {
return TRUE;
}
}
}
/**
* {@inheritdoc}
*/
public function build(RouteMatchInterface $route_match) {
$breadcrumb = new Breadcrumb();
$links = [];
// Add the url.path.parent cache context. This code ignores the last path
// part so the result only depends on the path parents.
$breadcrumb->addCacheContexts(['url.path.parent']);
$links[] = Link::createFromRoute($this->t('Home'), '<front>');
$breadcrumb->setLinks(array_reverse($links));
$route = $route_match->getRouteObject();
if ($route && !$route->getOption('_admin_route')) {
$links = $breadcrumb->getLinks();
$breadcrumb = new Breadcrumb();
$breadcrumb->addCacheContexts(['url.path.parent']);
$breadcrumb->setLinks($links);
}
return $breadcrumb;
}
}
