Drupal 8 - Aktuelle Seite zu Breadcrumb hinzufügen

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

Filtered HTML

  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • Zulässige HTML-Tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.

Plain text

  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.