Dans le troisième et dernier article de cette série de substitutions Magento, je vais expliquer comment remplacer les fichiers de contrôleur principaux. Dans les deux articles précédents de cette série, nous avons expliqué comment redéfinir les fichiers de base des blocs et des modèles en créant un module personnalisé. Dans ce tutoriel, nous verrons comment remplacer les fichiers du contrôleur principal.
Dans Magento, le contrôleur est responsable du traitement des demandes entrantes. Il s’agit d’un élément central de l’implémentation du routage Magento. Pour traiter probablement chaque demande dans Magento, le contrôleur définit différentes actions sous la forme de méthodes de classe de contrôleur. La méthode d'action du contrôleur inclut une logique d'application associée qui interagit avec des vues et des modèles pour préparer la sortie de cette page particulière. Parfois, vous devez modifier le flux d'exécution du contrôleur pour injecter du code personnalisé ou modifier le code principal..
Comme je l'ai dit dans le didacticiel précédent, il n'est jamais recommandé de modifier directement les fichiers de base, car cela rend vraiment difficile la mise à niveau de Magento. Pour éviter cela, nous devrions suivre la méthode standard pour apporter les modifications souhaitées aux fichiers principaux: nous devrions soit utiliser des observateurs d'événements, soit remplacer les fichiers principaux par nos fichiers de module personnalisés. Nous allons discuter de la fonctionnalité primordiale aujourd'hui.
Dans ce tutoriel, nous allons créer un module personnalisé pour comprendre le fonctionnement de la substitution de contrôleur dans Magento. Dans ce module personnalisé, nous verrons comment remplacer une classe de contrôleurs "Produit" du module principal "Catalogue". Remplacer fonctionne en configurant certaines balises XML selon les conventions de Magento.
Je suppose que vous connaissez le processus de création de modules de base dans Magento. Sinon, vous pouvez vous référer à cet article sur la création de modules personnalisés..
Voici la liste des fichiers requis pour la configuration souhaitée:
app / etc / modules / Envato_All.xml
: C'est un fichier utilisé pour activer notre module personnalisé.app / code / local / Envato / Catalogue / etc / config.xml
: Il s’agit d’un fichier de configuration de module dans lequel nous allons configurer la substitution de classe de contrôleur à l’aide de certaines balises, conformément aux conventions de Magento..app / code / local / Envato / Catalogue / controllers / ProductController.php
: C'est un fichier de classe de contrôleur personnalisé que nous utiliserons pour remplacer la classe de contrôleur "Produit" principale.Tout d'abord, nous devons créer un fichier d'activation de module. Créez un fichier "app / etc / modules / Envato_All.xml" et collez le contenu suivant dans ce fichier. Nous avons utilisé Envato
comme notre espace de noms de module et Catalogue
comme nom de notre module. Cela activera notre module "Catalogue" par défaut.
vrai local
Ensuite, nous devons créer un fichier de configuration de module. Créez "app / code / local / Envato / Catalogue / etc / config.xml" et collez le contenu suivant dans ce fichier..
1,0 Envato_Catalog
Premièrement, nous avons défini un numéro de version de module en utilisant le
étiquette. le
tag est le nom du routeur du contrôleur frontal du module principal "Catalogue". Il informe le système de routage que nous voulons remplacer les contrôleurs du module "Catalogue".
Finalement, le
tag est utilisé pour informer le système de routage Magento qu'il doit charger les fichiers de contrôleur de votre module personnalisé, s'ils sont disponibles. Bien sûr, il chargera les fichiers de base du module "Catalogue" s'il ne parvient pas à les trouver dans votre module..
Enfin, il ne reste plus qu’à définir une classe de contrôleurs Envato_Catalog_ProductController
. Créons un fichier de contrôleur "app / code / local / Envato / Catalogue / controllers / ProductController.php" et collons le contenu suivant dans ce fichier.
getRequest () -> getParam ('category', false); $ productId = (int) $ this-> getRequest () -> getParam ('id'); $ specifyOptions = $ this-> getRequest () -> getParam ('options'); // prépare l'assistant et les paramètres $ viewHelper = Mage :: helper ('catalog / product_view'); $ params = new Varien_Object (); $ params-> setCategoryId ($ categoryId); $ params-> setSpecifyOptions ($ specifyOptions); // Render page try $ viewHelper-> prepareAndRender ($ productId, $ this, $ params); catch (exception $ e) if ($ e-> getCode () == $ viewHelper-> ERR_NO_PRODUCT_LOADED) if (isset ($ _GET ['magasin']) &&! $ this-> getResponse () -> isRedirect ()) $ this -> _ redirect ("); elseif (! $ this-> getResponse () -> isRedirect ()) $ this -> _ forward ('noRoute'); else Mage :: logException ($ e); $ this -> _ forward ('noRoute');
Nous avons défini un Envato_Catalog_ProductController
classe qui étend le noyau Mage_Catalog_ProductController
classe de contrôleur du module Catalogue. La chose importante à noter ici est que nous avons inclus le fichier de contrôleur principal "Mage / Catalogue / controllers / ProductController.php" avant la définition de la classe, car Magento ne l'inclura pas automatiquement..
Dans l'exemple ci-dessus, nous avons remplacé le viewAction
méthode du Mage_Catalog_ProductController
classe. Cela signifie que chaque fois qu'une page de détail du produit est affichée au début, elle appelle le viewAction
méthode définie dans votre classe de contrôleur personnalisé. Vous pouvez donc modifier le code défini dans cette méthode selon vos besoins..
Nous avons donc appris aujourd'hui comment remplacer les principaux fichiers de contrôleur dans Magento à l'aide d'un module personnalisé. J'espère que vous avez apprécié cette série et appris quelque chose d'utile que vous pouvez implémenter dans votre code! Partagez vos questions et suggestions en utilisant le flux ci-dessous!