Cela arrive de temps en temps et c'est parfois pas évident de comprendre comment faire car ca change un peu des autres rewrites mais voici le tutoriel sur comment modifier le comportement d'un controleur natif magento. Dans notre exemple nous verrons comment réecrire une action du CartController.
1- Importer la classe de l'ancien contrôleur
La premiere étape est de créer un nouveau controlleur et d'importer celui que vous voulez réecrire.
require_once "Mage/Checkout/controllers/CartController.php";
Ce qui vous donne un truc du style :
require_once "Mage/Checkout/controllers/CartController.php";
class Pfay_Checkout_CartController extends Mage_Checkout_CartController
{
# surcharge de indexAction
public function indexAction() {
die('votre mothode à bien été surchargé !!');
}
}
Le require_once est important sinon votre extends ne marchera pas (en effet magento ne pourra pas autoloadé la classe du controleur)
2- Déclarer la réecriture du contrôleur avec "before"
Afin que votre classe soit prise en compte à la place du
CartController natif de magento, définissez dans le fichier
config.xml de votre module et insérer le routeur suivant dans
frontend :
<routers>
<checkout>
<args>
<modules>
<Pfay_Checkout before="Mage_Checkout">Pfay_Checkout</Pfay_Checkout>
</modules>
</args>
</checkout>
</routers>
</frontend>
Oui il y a juste ça a faire et ça marche !! En fait on lui dit juste de prendre le controlleur de mon module Pfay_Checkout avant celui de Mage_Checkout comme ca il charge notre nouvelle classe, ensuite cette classe étend la précédente grâce a son require_once...et voilà ca marche :)
Vous remarquerez particuliérement le "before=" et le fait que le routeur s'apelle "checkout" comme dans la déclaration du routeur qui va chercher la classe native dans le core (attention sur ce point, allez dabord voir dans le core quel routeur vous devez surcharger).
Et voilà vous savez maintenant réecrire un controleur natif magento, Félicitation ! :)