Modifier un controller natif Magento (Rewrite)

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 ! :)
Documents disponibles pour cet article :
Questions sur cette leçon
Pas de questions pour cette leçon. Soyez le premier !

Vous devez etre connecté pour demander de l'aide sur une leçon.