Standardmäßig lässt Drupal 8 die aktuelle Seite bei den Breadcrumbs außen vor.
Um die aktuelle Seite bei allen Breadcrumbs zu ergänzen, bietet sich hook_system_breadcrumb_alter()
in einem eigenen Modul an.
Hier gibt es einen Ansatz dafür: https://www.drupar.com/blog/drupal-8-add-current-page-breadcrumb - Allerdings beschränkt sich dieser Ansatz auf Nodes und deckt nicht alle Seiten ab. Zudem funktioniert dieser Ansatz wegen Änderungen im Caching seit Drupal 8.4.x unter Umständen nicht (z. B. wenn mehrere Menueinträge, den gleichen Menüparent haben).
Mit folgendem Code wird die aktuelle Seite als Link am Ende der Breadcrumbs für alle Seiten ergänzt:
function your_module_system_breadcrumb_alter(\Drupal\Core\Breadcrumb\Breadcrumb &$breadcrumb, \Drupal\Core\Routing\RouteMatchInterface $route_match, array $context) {
$request = \Drupal::request();
/* @var Drupal\Core\Controller\TitleResolver $title_resolver */
$title_resolver = \Drupal::service('title_resolver');
$title = $title_resolver->getTitle($request, $route_match->getRouteObject());
if (!empty($title)) {
$breadcrumb->addLink(\Drupal\Core\Link::createFromRoute($title, $request->getRequestUri()));
}
$breadcrumb->addCacheContexts(['url.path']);
}
Will man die aktuelle Seite nicht verlinken in den Breadcrumbs sieht es so aus:
function your_module_system_breadcrumb_alter(\Drupal\Core\Breadcrumb\Breadcrumb &$breadcrumb, \Drupal\Core\Routing\RouteMatchInterface $route_match, array $context) {
$request = \Drupal::request();
/* @var Drupal\Core\Controller\TitleResolver $title_resolver */
$title_resolver = \Drupal::service('title_resolver');
$title = $title_resolver->getTitle($request, $route_match->getRouteObject());
if (!empty($title)) {
$breadcrumb->addLink(\Drupal\Core\Link::createFromRoute($title, '<none>'));
}
$breadcrumb->addCacheContexts(['url.path']);
}
Neuen Kommentar schreiben