Das Örtchen RSS-Feed
Kategorie
Kategorie: Blog
Buttons & Statistiken
Neueste Kommentare

Drupal 7: Breadcrumbs für statische Websites

Da gestern mein erstes Projekt auf Basis von Drupal 7 online ging, kann ich mir heute etwas Zeit zum Beleuchten der Probleme nehmen. Problem Nr. 1 war wie es der Titel schon andeutet, die Umsetzung von sinnvollen Breadcrumbs. Hierbei scheint Drupal in der Version 7 immer noch das Problem zu haben, daß zur Bildung der Breadcrumbs lediglich das Menü Navigation ("navigation") benutzt wird. In meinen Projekten nutze ich aber im Normalfall das Hauptmenü ("main-menu")  zusammen mit einem Sekundärmenü ("menu-secondary-menu") und oftmals noch einem weiteren Menü für Quicklinks ("menu-quick-links"). Die Quicklinks bieten hierbei einen Direktzugriff auf wichtige Unterseiten des Sekundärmenüs.

Die Probleme

Im Rahmen meiner Breadcrumbs hatte ich also zwei Probleme zu lösen. So soll Drupal doch bitte das korrekte Menü für die Breadcrumbs nutzen und dabei auch noch korrekt arbeiten, wenn ein Eintrag in zwei Menüs auftaucht.

Die Lösung

Theoretisch lassen sich beide Probleme ziemlich einfach lösen, da hierfür das Modul Menu Breadcrumb optimal geeignet ist. Dieses Modul bietet uns gleich mehrere Features:

  1. Ermittlung in welchen Menüs die jeweilige Seite auftaucht
  2. Gewichtung der einzelnen Menüs (falls eine Seite in mehreren Menüs auftaucht)
  3. Anhängen des aktuellen Seitentitels an die Breadcrumbs (auf Wunsch verlinkt)

Dies hat in meinen Drupal 6-Projekten auch immer wunderbar funktioniert. Bei Version 7.x-1.3 trat jedoch ein fieser Bug auf, sofern die Seite in mehreren Menüs enthalten ist. Hier wurden die Breadcrumbs dummerweise immer auf Basis der Quicklinks erstellt, womit jegliche Elternseiten fehlten (Quicklinks haben eine flache Hierarchie).

Bei den problematischen Seiten war es auch egal, wie die Gewichtung der Menüs aussah oder ob einzelne Menüs sogar deaktiviert waren. Genau dieses Problem beschreibt eine Meldung im Bugtracker. Leider gab es noch keine Reaktion auf diese Meldung, weswegen ich selbst nach der Ursache forschte.

Bei meinem Debugging fand ich die Ursache in der Datei menu_breadcrumb.module, welche in Zeile 326 nachfolgenden Code enthält:

 $active_menus = menu_get_active_menu_names(); 

Eine Überprüfung des Variableninhalts zeigte mir, daß vermutlich durch eines der anderen installierten Module der Rückgabewert der Funktion unerwartet ist. Der Rückgabewert enthält nämlich alle existierenden Menüs als Array. In der folgenden Codezeile würde dann das ermittelte aktive Menü (mit der höchsten Gewichtung) an dieses Array angehängt, womit es zweimal als Wert im Array auftaucht. Dummerweise scheint jedoch die Reihenfolge im Array festzulegen, welches Menü als Breadcrumb genutzt wird. Im Rückgabewert tauchen die Quicklinks vor dem eigentlich gewünschten Menü auf, was zum festgestellten Problem führt.

 $active_menus = array(); 

Ich habe mich als schnelle (wenn auch böse) Lösung dafür entschieden, den Rückgabewert gar nicht mehr zu nutzen. Ich konnte keine negativen Auswirkungen auf die restlichen Module meiner Installation feststellen, halte dies jedoch für relativ wahrscheinlich. Eventuell ist auch ein Bugfix auf Basis von array_unshift möglich, dies überlasse ich aber lieber dem Modul-Maintainer.

Fazit

Die Nutzung von Content-Management-Systemen mit Erweiterungsmodulen ist immer wie das Wandern auf einem schmalen Grad, da kein Entwickler alle sonstigen Module kennen kann und somit grundsätzlich negative Seiteneffekte bei der Kombination von Modulen auftreten können. Ich vermute, daß die Ursache meiner aktuellen Probleme das Modul Administration Menu ist, hatte jedoch keine Lust dies zu testen.

Hallo! Bist du neu hier? Dann abonniere doch den RSS-Feed dieses nicht mehr ganz so stillen Örtchens, um über meine geistigen Ergüsse auf dem Laufenden zu bleiben. Alternativ besteht auch die Möglichkeit, sich von FeedBurner per E-Mail über meine Ausscheidungen benachrichtigen zu lassen.

Neuen Kommentar schreiben

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
Der Inhalt dieses Feldes wird öffentlich zugänglich angezeigt, aber als rel="nofollow" markiert.
Hinweis

Kommentare beleben den Blog! Ich freue mich über jeden Kommentar. Du kannst hier offen Deine Meinung zum Artikel sagen, aber bitte beachte die Netiquette und vermeide es andere zu beleidigen.

Bitte unterlasst es die Kommentare zu SEO-Zwecken zu missbrauchen. Kommentare mit Links, die nicht zu Blogs führen (oder zu Blogs mit Grauzonen-Themen) und/oder Keywords als Namen verwenden, sind nicht erwünscht!

Möchtest Du mir einen Blog-Artikel schmackhaft machen, dann schreib die URL ohne HTML-Tag in den Kommentarbereich und ich werde diesen bei Gefallen verlinken.