Magento Hauptnavigation aufteilen / Themenwelten

Für ein aktuelles Projekt möchte ich neben der Standardnavigation für Kategorien (z.B. Bücher, DVD, Elektronik) eine alternative Navigation anlegen. In dieser Navigation bewegt man sich in Themenwelten, z.B. “Alles für’s Weinachtsfest”, “Präsente für den Valentinstag”…

Die Navigationen sollen unabhängig voneinander und an unterschiedlichen Stellen auf der Webseite angezeigt werden.
Außerdem sollen sie möglichst komfortabel über die Administration gepflegt und jederzeit verändert und erweitert werden können.

Scribbel der geplanten Platzierung:
menu-special

Vorüberlegung:

Liegen die Kategorien der Hauptnavigation (oben) und die Kategorie “Themenwelten” in der selben Rootkategorie, so kann das Hauptmenu abgebildet werden, indem die Kategorie “Themenwelten” einfach ausgeblendet wird.

Die zweite Navigation (links) soll nur die Kindelemte (Weihnachten, Valentinstag…) der Kategorie “Themenwelten” anzeigen.

Anlegen der Kategorien in der Administration:

menu-admin
Zunächst lege ich die Kategorien in der Administration an. Die entsprechende Struktur zeigt der Screenshot. “root-1″ ist die Rootkategorie meines Shops. Für die nächsten Schritte benötigen wir die ID der Kategorie “Themenwelten”. In meinem Fall ist das die “12″.

Sind alle Kategorien angelegt und werden im Frontend angezeigt, kann es jetzt weitergehen.

Ausblenden der Kategorie Themenwelten (ID 12)

Anmerkung: meine Ausführungen beziehen sich auf das Default Theme. Es kann möglich sein, dass die Dateien bei Ihnen anders heißen.

Datei: magento/app/design/frontend/deinpackage/deintheme/template/navigation/top.phtml

Hier werden die Menuelemente ausgegeben. Wir suchen:

<?php foreach ($this->getStoreCategories() as $_category): ?><br />
<?php echo $this->drawItem($_category) ?><br />
<?php endforeach ?>

Und ersetzen zu:

<?php foreach ($this->getStoreCategories() as $_category): ?><br />
<?php if($_category->getData('entity_id') == 12): ?><br />
<?php else: ?><br />
<?php echo $this->drawItem($_category) ?><br />
<? endif ?><br />
<?php endforeach ?>

Vergewissern Sie sich, dass Sie bei in Zeile 2 die ID verwenden, die für Ihr Setup gilt.
Ein kurzer Check im Frontend und die Kategorie Themenwelten sollte nicht mehr angezeigt werden.

Zweite Navigation (Themenwelten) erstellen

In: magento/app/design/frontend/deinpackage/deintheme/template/navigation/ erstellen wir eine neue Datei special.phtml und schreiben einen kurzen Blindtext hinein um später prüfen zu können, ob im Frontend auch etwas ankommt.

Jetzt muss der Block für das neue Menu in den Layout Dateien (XML) eingetragen werden.
In: magento/app/design/frontend/deinpackage/deintheme/layout/page.xml ergänze ich im Block für die Linke Spalte (left), also in:

<block type="core/text_list" name="left" as="left" translate="label">

den Block für das Menu:

<block type="core/text_list" name="special.menu" as="specialMenu"/>

In: magento/app/design/frontend/deinpackage/deintheme/layout/catalog.xml ergänze ich in der default Sektion:

<reference name="special.menu"><br />
<block type="catalog/navigation" name="catalog.specialnav" template="catalog/navigation/special.phtml"/><br />
</reference>

Das sollte es jetzt schon gewesen sein. Machen wir den Check ob im Frontend unser Blindext in der linken Spalte erscheint. Jawoll. Alles Da.
Falls nicht, kann es sein, dass sie in der phtml-Datei die Ihre akteulle Page verwendet (1column.ptml, 2columns-left.phtml …) an der entsprechenden Stelle noch:

<?php echo $this->getChildHtml('specialMenu') ?>

eintragen müssen.

Menuelemte aus der Themenkategorie ausgeben

Datei: magento/app/design/frontend/deinpackage/deintheme/template/navigation/special.phtml

Hier will ich nun die Kindelemente der Kategorie mit ID 12 ausgeben. Die Ausgabe erfolgt als einfache unsortierte Liste und kann sehr einfach über CSS gestaltet werden. Da ich keine weiteren Unterebenen habe ist es recht simpel.

Copy & Paste

<ul id="nav-specials"><br />
<?php $parentCategoryId = 12; // set correct parent category id<br />
foreach (Mage::getModel('catalog/category')->load($parentCategoryId)->getChildrenCategories() as $childCategory) <br />
{ ?><br />
<li><a href="<?php echo $childCategory->getUrl();?>"><?php echo $childCategory->getName();?></a></li><br />
<? } ?><br />
</ul>

Frontend Check -> Läuft. Und alle so… YEAH.

Update

Nach Hinweis von Rouven Alexander Rieker folgende Ergänzung:
Das ganze funktioniert auch, wenn man die Kategorie “Themenwelten” in der Admin auf “inaktiv” stellt. Dann erspart man sich die “top.phtml” zu editieren.

Funktioniert nicht mit Flat Catalog Category.

  1. Bernhard Ertler on said:

    Vielen Dank für die tolle Anleitung. Hat auf Anhieb funktioniert.

    Ich habe die Datei special.phtml noch um einen Aktiv-Status ergänzt:

    getCurrentUrl();

    foreach (Mage::getModel(‘catalog/category’)->load($parentCategoryId)->getChildrenCategories() as $childCategory) {
    $class=”;
    if (strlen($currentURL) == similar_text($currentURL,$childCategory->getUrl())) {
    $class=’ class=”active” ‘;
    }
    ?>
    <li><a href="getUrl();?>”>getName();?>

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>