Ich habe versucht, einen neuen Breadcrumb-Override zu definieren, erhalte jedoch weiterhin die Site-Standardeinstellung.
Ich habe ein benutzerdefiniertes Modul erstellt, foo_breadcrumb:
- modules/custom/foo_breadcrumb
- foo_breadcrumb.info.yml
- foo_breadcrumb.services.yml
- src/
- BreadcrumbBuild.php
Hier ist der foo_breadcrumb.services.yml
:
services:
foo_breadcrumb.breadcrumb:
class: Drupal\foo_breadcrumb\BreadcrumbBuild
tags:
- { name: breadcrumb_builder, priority: 100 }
Innen habe src/BreadcrumbBuild.php
ich:
<?php
namespace Drupal\foo_breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderBase;
class BreadcrumbBuild implements BreadcrumbManager {
/**
* {@inheritdoc}
*/
public function applies(array $attributes) {
return true;
}
/**
* {@inheritdoc}
*/
public function build(array $attributes) {
$breadcrumb[] = $this->l($this->t('Test'), NULL);
$breadcrumb[] = $this->l($this->t('Test2'), 'test');
return $breadcrumb;
}
}
?>
Ich habe angefangen, die einzige Beschreibung zu bearbeiten, die ich für Drupal 8 finden konnte , aber es scheint, dass eine ältere Version des PSR-4-Autoloadings verwendet wird, die nicht mehr vorhanden ist (für den Rekord bin ich auf 8.0.0 -dev-beta3), und so ging ich davon aus, wie alle anderen Module in der Codebasis funktionieren.
Jetzt bin ich mir ziemlich sicher, dass dies korrekt ist, um das Modul zum Laden zu bringen. Ich bin mir jedoch nicht sicher, ob
class BreadcrumbBuild extends BreadcrumbBuilderBase
ist richtig. Das Problem ist, dass das alte Tutorial, von dem ich auf Erwähnungen BreadcrumbBuilderBase
verweise, nicht mehr erwähnt wird, und ich frage mich, ob es veraltet ist - und wie ich das tun soll.
Ebenso verstehe ich nicht wirklich, was die services.yml
Datei in dieser Hinsicht tut, es gibt dafür nirgendwo Dokumentation.
quelle
Jetzt geht das schon wieder los. Diese Antworten sind größtenteils richtig. Eine Sache, die Sie nicht vergessen dürfen, sind "Cache-Tags" und "Cache-Kontexte".
Ich habe einen Taxonomiebegriff auf einem Knoten als Breadcrumb eingerichtet.
Ich habe es mit Ratschlägen aus diesem Beitrag zum Laufen gebracht, aber dann habe ich mich umgesehen und auf jeder Seite die gleichen Brotkrumen bemerkt.
Kurz gesagt, stellen Sie sicher, dass Sie einige Cache-Kontexte und -Tags festlegen.
Hier ist mein Service in Kürze: https://gist.github.com/jonpugh/ccaeb01e173abbc6c88f7a332d271e4a
Hier ist meine build () Methode:
quelle
Update 2016 Drupal 8
In der Dokumentation wird angegeben, dass Sie eine Instanz der Breadcrumb-Klasse zurückgeben müssen. Wenn Sie Probleme haben, es zum Laufen zu bringen. Hier ist die Lösung, die für mich funktioniert hat.
Dann die yml-Datei
PS: Wenn Sie Bootstrap verwenden, gehen Sie zu Ihrer
/admin/appearance/settings
Einstellungsseite und sehen Sie sich die Breadcrumb-Einstellungen an.Show 'Home' breadcrumb link
sollte aktiviert sein. UndShow current page title at end
sollte abgehakt werden.Nachdem dies erledigt ist, leeren Sie Ihren Cache. Jedes Mal, wenn Sie eine YML-Datei ändern, müssen Sie auch im Debug-Modus den Cache leeren. Sie können zu gehen,
/core/rebuild.php
wenn Sie nicht weiterkommen und nicht wieder aufbauen können.quelle
Caching nicht vergessen
Der Render-Cache wurde relativ spät im D8-Entwicklungszyklus geändert und wird daher in der d8ftw-Reihe oder den anderen Antworten auf diese Frage nicht erwähnt.
Die Cache-API-Dokumentation bezieht sich speziell auf das Rendern von Arrays, alle diese Anweisungen gelten jedoch auch für Breadcrumbs. Breadcrumbs haben eine
toRenderable()
Methode. Drupal wird versuchen, sie im Render-Cache zwischenzuspeichern. Das bedeutet, dass Sie genügend Informationen angeben müssen , damit Drupal dies ordnungsgemäß ausführen kann.Die Details sind in den Dokumenten enthalten, aber die Kurzversion
Breadcrumb
implementiert dieRefinableCachableDependencyInterface
. In Ihrer Builder-Klasse möchten SieaddCachableDependency()
mit allen Entitäten oder Konfigurationsobjekten aufrufen , die zum Erstellen des Breadcrumbs verwendet werden. In der Dokumentation zu 'CacheableDependencyInterface & friends' wird detaillierter beschrieben, wie und warum.Wenn es andere Kontexte gibt, in denen sich der Breadcrumb ändern könnte, müssen Sie ihn auch manuell verwenden
addCacheContexts()
, um sicherzustellen, dass der Block variiert,addCacheTags()
der Cache-Eintrag korrekt ungültig gemacht werden kann undmergeCacheMaxAge()
wenn der Cache zeitkritisch ist und verfallen muss.Wenn dies nicht ordnungsgemäß durchgeführt wird, wird einer Ihrer benutzerdefinierten Breadcrumb-Builder-Services "gewinnen", und die Breadcrumbs für diese eine bestimmte Seite werden auf jeder Seite für alle Besucher für immer bereitgestellt.
quelle
Es gibt einen anderen Weg, dies zu erreichen.
Erstellen Sie anschließend eine weitere Datei im Vorlagenordner Ihres Themas mit dem Namen "breadcrumb.html.twig" und fügen Sie den folgenden Code in diese Datei ein:
Das ist es. Leeren Sie nun den Cache und Sie erhalten einen Breadcrumb mit dem aktuellen Seitentitel wie Startseite / Aktueller Seitentitel. Sie können das Trennzeichen ändern, indem Sie "/" durch das gewünschte ersetzen.
quelle
Sie sollten ein Contrib-Modul verwenden, um den aktuellen Seitentitel zum Breadcrumb hinzuzufügen, z. B. Current Page Crumb: https://www.drupal.org/project/current_page_crumb
Wenn Sie den Code manuell codieren möchten, können Sie ihn aus dem src-Ordner dieses Moduls abrufen. Weitere Informationen zu Drupal 8 finden Sie hier: http://www.gregboggs.com/drupal8-breadcrumbs/
quelle
drush en current_page_crumb
ist nicht so schlimm.Ich hatte in Drupal 7 benutzerdefinierte Brotkrumen mit Token verwendet und als dieses Modul für Drupal 8 nicht verfügbar war, erstellte ich Ansichten für meine einzelnen Inhaltstypen mithilfe der Felder, die ursprünglich die Tokenfelder waren. Verwenden Sie es als Block und deaktivieren Sie den normalen Breadcrumb. Es war ein bisschen mehr Arbeit als Custom Breadcrumbs, aber es funktioniert.
quelle