Réécrire le contrôleur magento


12

J'ai besoin d'écraser l'action appelée _initAction du contrôleur:

/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php

dans mon propre module et contrôleur:

/app/code/local/Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.php

J'ai déjà essayé différentes façons de le résoudre: Première méthode où <from>et <to>j'ai essayé différentes combinaisons (Affichage de la page 404 introuvable):

 <rewrite>
     <qbikz_tooltip_adminhtml_catalog_product_attribute>
         <from><![CDATA[#^/adminpanel/catalog_product_attribute/edit/#]]></from>
         <to>/tooltip/adminhtml_catalog_product_attribute/init/</to>
     </qbikz_tooltip_adminhtml_catalog_product_attribute>
</rewrite>

+

 <frontend>
        <routers>
            <qbikz_tooltip>
                <use>admin</use>
                <args>
                    <module>Qbikz_ToolTip</module>
                    <frontName>catalog_product_attribute</frontName>
                </args>
            </qbikz_tooltip>
        </routers>
    </frontend>

Deuxième méthode (page affichant avec ignorer mes règles):

<admin>
        <routers>
            <adminhtml>
                <args>
                    <modules>
                        <Qbikz before="Mage_Adminhtml_Catalog_Product">Qbikz_ToolTip_Adminhtml_Catalog_Product</Qbikz>
                    </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>

Dans mon contrôleur j'ai mis die ("ok"); Mais cela n'apparaît pas. Peut-être que quelqu'un pourrait aider? Merci.


Avez-vous pensé à vider les caches? En particulier le cache de configuration?
Benubird

"Contrôleur Rewtire"? Qu'est-ce que c'est?
Buttle Butkus

Oui, ma cache est désactivée.
Stopper

L'écrasement est ok? désolé pour mon anglais =)
Stopper

Les gars s'il vous plaît répondre à mon fil- magento.stackexchange.com/questions/98758/…
Anup Chaudhary

Réponses:


15

Utilisez la deuxième méthode mais un peu modifiée. Votre XML devrait ressembler à ceci:

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <Qbikz_ToolTip before="Mage_Adminhtml">Qbikz_ToolTip_Adminhtml</Qbikz_ToolTip>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>

Créez maintenant le fichier Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpavec ce contenu:

<?php 
require_once 'Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php';
class Qbikz_ToolTip_Adminhtml_Catalog_Product_AttributeController extends Mage_Adminhtml_Catalog_Product_AttributeController {
   protected function _initAction(){
       //your magic here
   }
}

@Marius ce qui est préférable d'exiger un fichier, votre chemin ou require_once (Mage :: getModuleDir ('controllers', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); en outre, je veux savoir si nous pouvons réécrire le bloc et le contrôleur dans un seul module ou si nous devons écrire des modules séparés pour écrire le bloc et le contrôleur.
Adnan

Les deux façons ont le même résultat. Mais si vous voulez être politiquement correct à 100%, utilisez la méthode que vous avez mentionnée. Vous pouvez également utiliser le même module pour réécrire des blocs et des contrôleurs.
Marius

Cela semble ne pas fonctionner lorsque vous essayez de remplacer indexAction () de Mage_Checkout :: CartController.php.
Max

Dans 1.9.4.2, cela génère une erreur pour moi. Le contrôleur lance un 404. Peut-être y a-t-il une façon différente de le faire maintenant? Cela m'arrive en remplaçant un contrôleur de paiement
gabtzi

0

Dans mon extension onestepcheckout, fichier de configuration: app / code / local / Gurutheme / Onestepcheckout / etc / config.xml

<frontend>
        <routers>
             <checkout>
                <args>
                    <modules>
                        <Gurutheme_Onestepcheckout before="Mage_Checkout">Gurutheme_Onestepcheckout</Gurutheme_Onestepcheckout>
                    </modules>
                </args>
            </checkout>
        </routers>
</frontend>

J'ai ajouté un contrôleur

app/code/local/Gurutheme/Onestepcheckout/controllers/OnepageController.php

pour remplacer le contrôleur principal Onepage

app/code/core/Mage/Checkout/controllers/OnepageController.php

Voici le code source de base de ce contrôleur prioritaire:

require_once("Mage/Checkout/controllers/OnepageController.php");

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

La principale chose que lors de la réécriture des contrôleurs magento, nous devrions inclure celui d'origine et l'étendre, cela aide tous les comportements natifs avant afin que toutes les fonctionnalités pré-construites fonctionnent.


Uniquement si vous comptez sur des méthodes supplémentaires (protégées) de la classe d'origine dans vos actions substituées. Toutes les actions manquantes dans votre contrôleur seront gérées par le contrôleur d'origine. Notez que techniquement, vous ne réécrivez pas le contrôleur mais l' ajoutez à la liste des gestionnaires pour un nom de front
Fabian Schmengler

Totalement d'accord, nous le
réacheminons

-1

J'ai réécrit le contrôleur de liste de souhaits d'entreprise.

Dans mon config.xml

<frontend>
    <routers>
        <wishlist>
            <args>
                <modules>
                    <namespace_modulename before="Enterprise_Wishlist">Namespace_Modulename</namespace_modulename>
                </modules>
                <module>Namespace_Modulename</module>
                <frontName>shoppinglist</frontName>
            </args>
        </wishlist>
    </routers>
</frontend>

Et dans ma IndexControllerligne Ajouter ci-dessous:

require_once 'Enterprise/Wishlist/controllers/IndexController.php';

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Vous pouvez également réécrire l'assistant comme ceci: /magento//a/91474/33509

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.