Kunden-Name (und andere variable Inhalte) im Header-Menü anzeigen

In einem vergangenen Beitrag („Top-Links von Magento anpassen„) habe ich gezeigt, wie man die Menüeinträge im Kopfbereich der Magento-Shopseite anzeigen kann. Heute geht es darum, wie man variable Inhalte, zum Beispiel den Namen des Kunden, in der Navigation unterbringt. Der Beispielcode wurde mit Magento 1.4 und 1.5 getestet.

Das Ziel

Wenn ein Kunde eingeloggt ist, soll folgender Link angezeigt werden:


Der Name des Kunden wird mit seinem Benutzer-Account verknüpft. Davor steht ein nicht verlinkter Text: „Eingeloggt als:“. Dadurch kann man sich die zusätzliche Zeile „Willkommen, X Y!“ und den Link „Mein Benutzerkonto“ sparen.

Der Weg

Wir werden den Link (so wie die anderen Links) über ein Update im Layout-XML einfügen. Dazu erstellen/öffnen wir die Datei local.xml in unserem Template-Layout-Verzeichnis (app/design/frontend/[package]/[theme]/layout/local.xml).

Wir wollen, dass der Eintrag nur angemeldeten Nutzern angezeigt wird. Daher verwenden wir das Handle customer_logged_in. Dort greifen wir die Referenz zum Block top.links auf, der für die Ausgabe der Links zuständig ist. Über den Aufruf der Block-Methode addLink fügen wir einen Link ein und werden den Link zum Konto, den Linktext (also den Benutzernamen), den vorgelagerten Text sowie die Id des Listen-Elements setzen. Gleichzeitig blenden wir den Standard-Link „Mein Benutzerkonto“ aus.

<?xml version="1.0"?>
<layout version="0.0.1">
	<customer_logged_in>
       <reference name="top.links">
           <action method="addLink" translate="label title beforeText">
               <label helper="customer/getCustomerName" />
               <url helper="customer/getAccountUrl" />
               <title>Zum Benutzerkonto wechseln</title>
               <prepare />
               <urlParams />
               <position>10</position>
               <liParams>
               	    <id>header-account-link</id>
               </liParams>
               <aParams />
               <beforeText>Eingeloggt als:</beforeText>
           </action>
       </reference>
    </customer_logged_in>
	<default>
		<reference name="top.links">
			<action method="removeLinkByUrl">
				<url helper="customer/getAccountUrl" />
			</action>
		</reference>
	</default>
</layout>

Mit diesem Code wird unser Link an erster Stelle eingefügt und der Benutzerkonto-Link entfernt. Der Trick ist der Einsatz des Customer-Helpers (Mage_Customer_Helper_Data), dessen Methode getCustomerName() den Namen des Kunden zurückliefert. Indem wir dem label-Tag ein Attribut „helper“ verpassen, veranlassen wir Magento dazu,  die angegebene Methode getCustomername() des Customer-Helpers ausführen und als Wert für den label-Tag anzunehmen.  Durch den Einsatz von Helpern lassen sich so viele Informationen einfach und dynamisch einbinden.

Sowohl der Linktext, der Link-Titel als auch der vorangestellte Text können übersetzt werden – das verdanken wir dem Attribute „translate“ im action-Tag. Da das li-Element die Id header-account-link erhält, können der Text und der Link innerhalb des Listen-Elemnents gestylt werden. Für eine Darstellung wie im Screenshot habe ich folgende CSS-Regeln angewendet:

#header-account-link {
    color: #fff;
}

#header-account-link a {
    margin-left: 4px;
}

Damit die Welcome-Nachricht nicht mehr angezeigt wird, habe ich die Template-Datei page/html/header.php in mein Theme kopiert (app/design/frontend/[package]/[theme]/template/page/html/header.phtml) und diese Zeile entfernt:

<p><?php echo $this->getWelcome()?></p>

Fazit

Genauso wie der Username lassen sich auch beliebige weitere Informationen in die Navigation einbinden. Das kann von vorhandenen Helpern (zum Beispiel zur Einbindung von statischen Seiten) bis zu selbst geschriebenen Helpern reichen, die diverse Informationen wie URLs, Linktexte usw. bereit stellen.

6 Antworten

  1. Andreas sagt:

    Hallo ich bin neu in der Magento Welt, und frage mich warum das ganze in Magento 1.7.0.2 nicht mehr funktioniert ?!? Ich habe alles wie oben beschrieben umgesetzt aber ich bekomme einfach keine Ausgabe. Er zeigt gar nichts an? Ich verstehe nicht warum?

    • Hallo, gerade ausprobiert: der Code funktioniert in 1.7.0.2.

      Wenn etwas in Magento nicht funktioniert, dann immer zuerst überprüfen:
      1.) Habe ich den Cache deaktiviert / aktualisiert?
      2.) Gibt es eine Meldung in var/system.log bzw. var/exception.log (Logging muss dafür aktiviert sein)?
      3.) Ist mein XML-Code valide?
      4.) Falls man auf die Fehlerseite gelangt: was steht in var/report in der Datei, die als Namen den angegebenen Fehlercode hat?

  2. Jerome sagt:

    Klingt sehr gut. Funktioniert auch. Danke!

    Irgendwie ist es aber eine Herausforderung die Kundengruppe anzeigen zu lassen.
    Hast du das auch schon mal versucht?

    Danke,
    JS.

  3. Michael sagt:

    Ja, Magento kann manchmal so einfach sein!

  1. 10.06.2011

    […] der Kundengruppe im Headermenü anzeigen Magento Am 10. Juni 2011Jerome hat bei meinem letzten Beitrag zur Topnavigation gefragt, wie man den Namen der Kundengruppe anzeigen kann. Sehen wir uns das an.Die Lösung: eine […]