Kurzinfo


Andreas von Studnitz

mehr »

Andreas von Studnitz arbeitet seit 2012 als Geschäftsführer und Entwickler für die Magento-Agentur integer_net GmbH. Aktuelle Informationen finden Sie unter www.integer-net.de

Kontakt

Telefon:
0170 486 0 464

E-Mail:
avs(at)integer-net.de

Twitter: twitter.com/avstudnitz

mehr »

< Magento: Umsetzung von flexiblen Preisen

Magento: Entfernen von Menüpunkten im Benutzerkonto per local.xml

15.04.2011 20:30

Auch ohne das Überschreiben vieler Layout-XML-Dateien lassen sich Links wie "Wiederkehrende Zahlungen" und "Verkaufsbedingungen" im Benutzerkonto entfernen.

Die "einfache" Lösung für das Entfernen von Links in der Benutzerkonto-Navigation beinhaltet, Kopien der entsprechenden Layout-XML-Dateien, in denen die Links definiert sind (z.B. billing_agreement.xml, tag.xml, downloadable.xml), in das lokale Template zu kopieren und dort den Aufruf <action method="addLink" ... > zu entfernen. Diese Vorgehensweise funktioniert, sie ist aber nicht schön, und kann bei Updates auch Probleme bringen. So wird jeweils die komplette Datei überschrieben, was dazu führt, dass Ergänzungen oder Änderungen in der nächsten Magento-Funktion nicht automatisch übernommen werden.

Aus diesem Grund werden alle Änderungen, die im Layout gemacht werden, idealerweise in einer einzigen, separaten XML-Dateien gemacht. Hier kann man die Datei local.xml im layout-Verzeichnis des eigenen Templates erstellen, die automatisch und bevorzugt eingebunden wird.

Schön wäre jetzt ein Befehl wie folgt:

<customer_account>
<reference name="customer_account_navigation">
<action method="removeLink" translate="label"><name>recurring_profiles</name></action>
<action method="removeLink" translate="label"><name>billing_agreements</name></action>
<action method="removeLink" translate="label"><name>reviews</name></action>
<action method="removeLink" translate="label"><name>tags</name></action>
<action method="removeLink" translate="label"><name>newsletter</name></action>
<action method="removeLink" translate="label"><name>downloadable_products</name></action>
</reference>
</customer_account>

Leider existiert keine Methode wie "removeLink" in der verwendeten Klasse. Die Lösung: man erstellt sich diese Methode selbst. Hierfür wird die Klasse Mage_Customer_Block_Account_Navigation überschrieben und um eine entsprechende Funktion ergänzt. Dies passiert in einem eigenen Modul, das bei mir "AvS_Template" heißt.

Der Inhalt der Datei app/code/local/AvS/Template/Block/CustomerAccountNavigation.php sieht wie folgt aus:

<?php
class AvS_Template_Block_CustomerAccountNavigation extends Mage_Customer_Block_Account_Navigation
{
public function removeLink($name)
{
unset($this->_links[$name]);
return $this;
}
}

In der Datei app/code/local/AvS/Template/etc/config.xml erfolgt die Definition des Rewrites:

<?xml version="1.0"?>
<config>
<modules>
<AvS_Template>
<version>0.1.0</version>
</AvS_Template>
</modules>
<global>
<blocks>
<customer>
<rewrite>
<account_navigation>AvS_Template_Block_CustomerAccountNavigation</account_navigation>
</rewrite>
</customer>
</blocks>
</global>
</config>

Desweiteren muss das Modul aktiviert werden. Dies passiert mit Hilfe der Datei app/etc/modules/AvS_Template.xml, die folgenden Inhalt hat:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<AvS_Template>
<active>true</active>
<codePool>local</codePool>
</AvS_Template>
</modules>
</config>

Ab sofort kann der oben aufgeführte Code-Block in der local.xml (oder einer anderen Layout-XML-Datei) verwendet werden.

Kommentare

Fabrizio Branca , 15.04.11 23:21:
Hallo Andreas,

saubere Lösung. Vielen Dank für diesen Blog-Beitrag :)

Viele Grüße,

Fabrizio
Daniel Sasse, 17.04.11 12:26:
Hallo Andreas, schöner Lösungsansatz. Ich arbeite schon länger in Layouts mit der local.xml aber ein guter Ansatz global ohne die entsprechenden xml Dateien anzupassen bzw. alle relevanten Layout Handles die die Links erzeugen nicht einzublenden fehlte mir bisher.

Kann man oft gebrauchen & selber nach Bedarf erweitern - Danke!

LG - Daniel
Vinai Kopp, 03.05.11 22:03:
Hi Andreas,

witzig - stolpere gerade über diesen Post nachdem ich vor 30 min das als mini-patch im Magento Jira+SVN committed habe... geht wohl nicht nur mir so das ich die Methoden vermisse :)
Andreas von Studnitz, 18.05.11 17:47:
Für die Enterprise Edition entfernt folgender Code in der local.xml fast alle Navigationspunkte im Kundenkonto (wenn o.g. Modul integriert ist):

<customer_account>
<reference name="customer_account_navigation">
<action method="removeLink" translate="label"><name>recurring_profiles</name></action>
<action method="removeLink" translate="label"><name>billing_agreements</name></action>
<action method="removeLink" translate="label"><name>reviews</name></action>
<action method="removeLink" translate="label"><name>tags</name></action>
<action method="removeLink" translate="label"><name>newsletter</name></action>
<action method="removeLink" translate="label"><name>downloadable_products</name></action>
<action method="removeLink" translate="label"><name>wishlist</name></action>
<action method="removeLink" translate="label"><name>enterprise_customerbalance</name></action>
<action method="removeLink" translate="label"><name>enterprise_giftcardaccount</name></action>
<action method="removeLink" translate="label"><name>giftregistry</name></action>
<action method="removeLink" translate="label"><name>enterprise_reward</name></action>
<action method="removeLink" translate="label"><name>invitations</name></action>
</reference>
</customer_account>
Dennis , 29.10.11 18:07:
Danke!! :) hat mir sehr geholfen..!
nic , 25.11.11 11:38:
ja super. das hat mir auch geholfen in 1.6.1. vielen dank
nic , 30.11.11 12:42:
kann man das auch für top.links erweitern??
<reference name="top.links">
<action method="removeLink" translate="label"><name>addCheckoutLink</name></action>
</reference>
SebiF , 01.03.12 19:14:
In Magento 1.6.2 scheint das Modul nicht zu funktionieren, bzw. zu gut. Es werden bei Aktivierung sofort alle Links entfernt, obwohl noch gar kein removeLink vorhanden ist :-/
Andreas von Studnitz, 30.03.12 14:36:
SebiF: Bei mir funktioniert es in 1.6.1 zumindest noch problemlos. Ich sehe keinen Grund, warum es in 1.6.2 nicht funktionieren sollte. Ich vermute eher ein anderes Problem. Evtl. wird der falsche Block abgeleitet...
Alexander Menk, 02.07.12 21:18:
In Magento2 gibt's das dann endlich integriert :-)

https://github.com/magento/magento2/pull/28
Alexander Menk, 26.09.12 16:37:
Wir haben auf Basis dessen ein kleines Modul veröffentlich welches auch noch andere Funktionen bietet seine Layouts sauber zu erstellen - d.h. ohne kopieren der vorhandenen XMLs. Beispielsweise kann man JS und CSS Elemente in einer vorgegebenen Reihenfolge einfügen.

There is a module for this: N98_LayoutHelper that helps to remove account links in a clean way:

https://github.com/netz98/N98_LayoutHelper

Grüße,

Alexander
Kommentar hinzufügen












Den Code eingeben: *


* - Pflichtfeld