Magento: Core Controller überschreiben

17. Juni 2010 at 04:15

Hier findet ihr eine kurze Anleitung wie ihr ein Controller aus dem Core-Package überschreiben könnt.

Im Magento-Wiki ist eine Anleitung vorhanden, allerdings funktionierte die bei mir nicht, deshalb wird hier ein anderer Weg beschrieben.

In dem Beispiel überschreiben wir den Controller für den Kunden-Login.

Step 1 – Config Datei erstellen

Zuerst muss eine eine Config-Datei erstellt werden, wo definiert wird, welcher Controller überschrieben werden soll.. Dies geschieht über eine XML-Datei, welche im folgendem Verzeichnis ablegt wird:

/app/code/local/<Namespace>/<Module>/etc/config.xml

<!-- overwrite only methods or extends the class -->
<config>
    <frontend>
        <routers>
            <customer>
                <args>
                    <module>
                        <Namespace_Module before="Mage_Customer">Namespace_Module</Namespace_Module>
                    </module>
                </args>
            </customer>
        </routers>
    </frontend>
</config>

oder wenn man den kompletten Controller ersetzen möchte (am Beispiel des Catalog-Modules):

<!-- overwrite the complete controller -->
<config>
    <frontend>
        <routers>
          <catalog>
            <use>standard</use>
            <args>
              <module>Seven_Catalog</module>
              <frontName>catalog</frontName>
            </args>
          </catalog>
        </routers>
    </frontend>
</config>

Step 2 – der neue Controller

Anschließend wird die Datei für den neuen Controller erstellt. Dieser wird im folgenden Verzeichnis abgelegt:

/app/code/local/Namespace/Module/controllers/AccountController.php

Der Inhalt des Controllers:

include_once("Mage/Customer/controllers/AccountController.php");
class MyCompany_MyModule_AccountController extends Mage_Customer_AccountController
{
    public function loginAction()
    {
        parent::loginAction();
    }
    public function indexAction()
    {
<pre>        echo 'test';
        parent::loginAction();
    }</pre>
}

Step 3 – Modul aktivieren

Nun wird nach dem Login eines Kunden auf der Übersicht Seite des Benutzerkontos die Ausgabe „test“ angezeigt.

Um Magento das Modul sichtbar zu machen muss es noch aktiviert werden, das geht über eine weitere XML-Datei welche im folgenden Verzeichnis abgelegt wird:

/app/etc/modules/Namespace_Module.xml

Der Inhalt ist wie folgt:

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Module>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Core />
                <Mage_Customer />
            </depends>
        </Namespace_Module>
    </modules>
</config>

Jetzt wird die Funktion „loginAction()“ von dem neuen Controller überschrieben.

Das war es schon, so einfach überschreibt man ein Controller in Magento! 🙂

Optional: Rewrite eines Controllers in Magento

Ggf. kann mit dem folgenden Einträgen in der config.xml ein Rewrite des Controllers erfolgen:

<rewrite>
 <seven_catalog_daniel>
 <from><![CDATA[#^/catalog/product_compare/add/(.*)$#]]></from>
 <to>/catalog/compare/add/</to>
 </seven_catalog_daniel>
 </rewrite>
 </global>
Daniel Briegert

Daniel Briegert

xing: https://www.xing.com/profile/Daniel_Briegert

More Posts - Website

Follow Me:
TwitterFacebook