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

Bitte kontaktieren Sie mich über die Website von integer_net.

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