In der Regel erfüllen Controller spezielle Aufgaben. Diese haben grundlegenden etwas mit Ihren Namen zu tun. So kümmert sich der Product-Controller um die Darstellung von Produkten und der Checkout-Controller um den "zur Kasse"-Prozess. Controller sollten nur überschrieben werden wenn der Controller eine gleichartige Aufgabe auf eine andere Art erledigen soll. Werden Produkte z.B. nur im Detail angezeigt wenn der Benutzer eingeloggt ist wäre es eine Möglichkeit hier Einfluss auf den Controller zu nehmen. In diesem Fall erfüllt der Controller weiterhin seine Ursprungsaufgabe jedoch in etwas abgewandelter Weise. Bei neuartigen Aufgaben werden selbstverständlich neue Controller verwendet und nicht bestehende bis zur Unkenntlichkeit verändert.
Den Controller überschreiben
Für den Fall wir also einen bestehenden Controller verändern müssen bietet Magento diese Möglichkeit über ein wenig XML-Code in der config.xml unseres Modules an:
<frontend>
<routers>
<catalog>
<args>
<modules>
<webguys_example before="Mage_Catalog">Webguys_Example</webguys_example>
</modules>
</args>
</catalog>
</routers>
</frontend>
Dieser XML-Code fügt im Suchpfad der Router von Magento vor Mage_Catalog unser Modul ein. Das bewirkt das Magento zuerst in unserem Controller-Ordner prüft ob ein passender Controller vorhanden ist. Erst danach schaut Magento im Modul Mage_Catalog nach. Erstellen wir nun in app/code/local/Webguys/Example/controllers den Controller mit dem Namen CategoryController.php überschreiben wir den Basiscontroller von Magento:
<?php
include_once("Mage/Catalog/controllers/CategoryController.php");
class Webguys_Example_CategoryController extends Mage_Catalog_CategoryController {
public function viewAction() {
die("Implementieren wir doch die View-Action neu!");
}
}
Um die Standardfunktionen vom Ursprungscontroller zu erben ist ein kleiner Trick von Nöten: Der Ursprungscontroller muss manuell mittels Include eingebunden werden da Magento bzw. das Zend-Framework prinzipiell Controller nicht automatisch lädt.
Ist das Modul richtig in Magento eingebunden erhält man nun, sobald die View-Action des Category-Controller aufgerufen wird, anstelle der Category die Ausgabe "Implementieren wir doch die View-Action neu!". Eine sinnvolle Implementierung fehlt somit und ist nicht Bestandteil dieses Beispiels.
[wgAddVersion version="1.4.1.1"]