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>