Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 20 |
| TermBreadcrumbBuilder | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
30 | |
0.00% |
0 / 20 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| applies | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| build | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 14 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\taxonomy\TermBreadcrumbBuilder. | |
| */ | |
| namespace Drupal\taxonomy; | |
| use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface; | |
| use Drupal\Core\Breadcrumb\Breadcrumb; | |
| use Drupal\Core\Entity\EntityManagerInterface; | |
| use Drupal\Core\Link; | |
| use Drupal\Core\Routing\RouteMatchInterface; | |
| use Drupal\Core\StringTranslation\StringTranslationTrait; | |
| /** | |
| * Provides a custom taxonomy breadcrumb builder that uses the term hierarchy. | |
| */ | |
| class TermBreadcrumbBuilder implements BreadcrumbBuilderInterface { | |
| use StringTranslationTrait; | |
| /** | |
| * The entity manager. | |
| * | |
| * @var \Drupal\Core\Entity\EntityManagerInterface | |
| */ | |
| protected $entityManager; | |
| /** | |
| * The taxonomy storage. | |
| * | |
| * @var \Drupal\Taxonomy\TermStorageInterface | |
| */ | |
| protected $termStorage; | |
| /** | |
| * Constructs the TermBreadcrumbBuilder. | |
| * | |
| * @param \Drupal\Core\Entity\EntityManagerInterface $entityManager | |
| * The entity manager. | |
| */ | |
| public function __construct(EntityManagerInterface $entityManager) { | |
| $this->entityManager = $entityManager; | |
| $this->termStorage = $entityManager->getStorage('taxonomy_term'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function applies(RouteMatchInterface $route_match) { | |
| return $route_match->getRouteName() == 'entity.taxonomy_term.canonical' | |
| && $route_match->getParameter('taxonomy_term') instanceof TermInterface; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function build(RouteMatchInterface $route_match) { | |
| $breadcrumb = new Breadcrumb(); | |
| $breadcrumb->addLink(Link::createFromRoute($this->t('Home'), '<front>')); | |
| $term = $route_match->getParameter('taxonomy_term'); | |
| // Breadcrumb needs to have terms cacheable metadata as a cacheable | |
| // dependency even though it is not shown in the breadcrumb because e.g. its | |
| // parent might have changed. | |
| $breadcrumb->addCacheableDependency($term); | |
| // @todo This overrides any other possible breadcrumb and is a pure | |
| // hard-coded presumption. Make this behavior configurable per | |
| // vocabulary or term. | |
| $parents = $this->termStorage->loadAllParents($term->id()); | |
| // Remove current term being accessed. | |
| array_shift($parents); | |
| foreach (array_reverse($parents) as $term) { | |
| $term = $this->entityManager->getTranslationFromContext($term); | |
| $breadcrumb->addCacheableDependency($term); | |
| $breadcrumb->addLink(Link::createFromRoute($term->getName(), 'entity.taxonomy_term.canonical', array('taxonomy_term' => $term->id()))); | |
| } | |
| // This breadcrumb builder is based on a route parameter, and hence it | |
| // depends on the 'route' cache context. | |
| $breadcrumb->addCacheContexts(['route']); | |
| return $breadcrumb; | |
| } | |
| } |