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.

Bouchon
la source
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
la source
@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.

phanvugiap
la source
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

vritika nigam
la source