Breadcrumbs sind im Magento-Standard nur für bestimmte Seitentypen definiert:
- Kategorieseiten
- Produktseiten (Screenshot)
Für die Usability ist es sinnvoll, wenn die Breadcrumbs auf allen Seiten vorkommen und man dort z.B. immer einen festen Link zur Startseite hat. Leider ist das nicht mit einem Befehl oder gar einer Konfigurationseinstellung möglich, man muss dies für jeden Seitentyp separat machen. Exemplarisch zeigen wir das Vorgehen hier für den Warenkorb und den Onepage-Checkout.
Die grundsätzlichen Befehle zum Erstellen einer Breadcrumb-Navigation sind nicht sehr komplex:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** @var $breadcrumbsBlock Mage_Page_Block_Html_Breadcrumbs */ if ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) { $breadcrumbsBlock->addCrumb('home', array( 'label' => Mage::helper('catalog')->__('Home'), 'title' => Mage::helper('catalog')->__('Go to Home Page'), 'link' => Mage::getBaseUrl() )); $breadcrumbsBlock->addCrumb('breadcrumb_cart', array( 'label' => Mage::helper('checkout')->__('My Cart'), 'title' => Mage::helper('checkout')->__('My Cart'), )); } |
Diesen Code kann man entweder in einen Controller (vor $this->renderLayout();) oder in einen Block einfügen. Der Hintergrund ist, dass der Block mit dem Namen „breadcrumbs“ auf jeder Seite in Magento vorhanden ist und nur befüllt werden muss.
Um jetzt keine Klasse zu überschreiben, nutzt man am Besten die Event-Observer-Technologie von Magento. Die passenden Events lauten „controller_action_layout_render_before_checkout_cart_index“ bzw. „controller_action_layout_render_before_checkout_onepage_index“ – für andere Seiten ergeben sich die zugehörigen Events normalerweise aus der Seiten-URL.
In ein eigenes Modul gegossen sieht das beispielsweise wie folgt aus:
Auszug aus der etc/config.xml im Modulverzeichnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<frontend> <events> <controller_action_layout_render_before_checkout_cart_index> <observers> <integernet_breadcrumbs> <type>singleton</type> <class>integernet_breadcrumbs/observer</class> <method>beforeCartRenderLayout</method> </integernet_breadcrumbs> </observers> </controller_action_layout_render_before_checkout_cart_index> <controller_action_layout_render_before_checkout_onepage_index> <observers> <integernet_breadcrumbs> <type>singleton</type> <class>integernet_breadcrumbs/observer</class> <method>beforeCheckoutRenderLayout</method> </integernet_breadcrumbs> </observers> </controller_action_layout_render_before_checkout_onepage_index> </events> </frontend> |
Model/Observer.php im Modulverzeichnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<?php class IntegerNet_Breadcrumbs_Model_Observer { /** * Retrieve current layout object * * @return Mage_Core_Model_Layout */ public function getLayout() { return Mage::getSingleton('core/layout'); } /** * Add breadcrumbs to cart page * * @param Varien_Event_Observer $observer */ public function beforeCartRenderLayout($observer) { /** @var $breadcrumbsBlock Mage_Page_Block_Html_Breadcrumbs */ if ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) { $breadcrumbsBlock->addCrumb('home', array( 'label' => Mage::helper('catalog')->__('Home'), 'title' => Mage::helper('catalog')->__('Go to Home Page'), 'link' => Mage::getBaseUrl() )); $breadcrumbsBlock->addCrumb('breadcrumb_cart', array( 'label' => Mage::helper('checkout')->__('My Cart'), 'title' => Mage::helper('checkout')->__('My Cart'), )); } } /** * Add breadcrumbs to checkout page * * @param Varien_Event_Observer $observer */ public function beforeCheckoutRenderLayout($observer) { /** @var $breadcrumbsBlock Mage_Page_Block_Html_Breadcrumbs */ if ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) { $breadcrumbsBlock->addCrumb('home', array( 'label' => Mage::helper('catalog')->__('Home'), 'title' => Mage::helper('catalog')->__('Go to Home Page'), 'link' => Mage::getBaseUrl() )); $breadcrumbsBlock->addCrumb('breadcrumb_cart', array( 'label' => Mage::helper('checkout')->__('My Cart'), 'title' => Mage::helper('checkout')->__('My Cart'), 'link' => Mage::getUrl('checkout/cart') )); $breadcrumbsBlock->addCrumb('breadcrumb_checkout', array( 'label' => Mage::helper('checkout')->__('Checkout'), 'title' => Mage::helper('checkout')->__('Checkout'), )); } } } |
Das Ergebnis ist dann entsprechend:
Das vollständige Beispielmodul gibt es hier zum Download.

Autor: Andreas von Studnitz
Andreas von Studnitz ist Diplom-Informatiker, Magento-Entwickler und Geschäftsführer von integer_net. Seine Schwerpunkte sind Entwicklung, Beratung und die Durchführung von Schulungen. Er ist Magento 2 Certified Professional Developer Plus und hat darüber hinaus weitere Magento Zertifizierungen für Magento 1 und Magento 2. Sowohl im Jahr 2019 als auch 2020 wurde Andreas als Magento Master in der Kategorie „Mentor“ ausgezeichnet.