Neueste Blog-Einträge
Kurzinfo

Andreas von Studnitz
- Diplom-Informatiker
- 6 Jahre Entwicklungs- und Projektleitungserfahrung in einer Internet-Agentur
- Magento-Freelancer
- Magento Certified Developer
- 4 Jahre Magento-Erfahrung
Magento: Entfernen von Menüpunkten im Benutzerkonto per local.xml
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.

saubere Lösung. Vielen Dank für diesen Blog-Beitrag :)
Viele Grüße,
Fabrizio
Kann man oft gebrauchen & selber nach Bedarf erweitern - Danke!
LG - Daniel
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 :)
<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>
<reference name="top.links">
<action method="removeLink" translate="label"><name>addCheckoutLink</name></action>
</reference>
https://github.com/magento/magento2/pull/28
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