Schreiben Sie den Controller Magento neu

12

Ich muss die Aktion _initAction vom Controller überschreiben:

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

in mein eigenes Modul und Controller:

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

Ich habe bereits verschiedene Lösungswege ausprobiert: Erste Methode wo <from>und <to>ich habe verschiedene Kombinationen ausprobiert (Zeige 404 Seite nicht gefunden):

 <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>

Zweite Methode (Seite mit ignoriere meine Regeln):

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

In meinen Controller stecke ich die ("ok"); Aber es zeigt sich nicht. Vielleicht könnte jemand helfen? Vielen Dank.

Stopper
quelle
Hast du daran gedacht, die Caches zu leeren? Besonders der Konfigurationscache?
Benubird
"Rewtire-Controller"? Was ist das?
Buttle Butkus
Ja, mein Cache ist aus.
Stopper
Überschreiben ist ok? Entschuldigung für mein Englisch =)
Stopper
Jungs, bitte beantworten Sie meinen Thread
Anup Chaudhary

Antworten:

15

Verwenden Sie die zweite Methode, aber ein bisschen modifiziert. Ihr XML sollte so aussehen:

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

Erstellen Sie nun die Datei Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpmit diesem Inhalt:

<?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
quelle
@Marius, was ist besser, um eine Datei, Ihren Weg oder require_once (Mage :: getModuleDir ('controller', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); Zusätzlich möchte ich wissen, ob wir Block und Controller in einem einzigen Modul umschreiben können oder ob wir separate Module schreiben müssen, um Block und Controller zu schreiben.
Adnan
Beide Wege führen zum gleichen Ergebnis. Aber wenn Sie zu 100% politisch korrekt sein wollen, wenden Sie die von Ihnen erwähnte Methode an. Sie können dasselbe Modul auch zum Umschreiben von Blöcken und Steuerungen verwenden.
Marius
Dies scheint nicht zu funktionieren, wenn Sie versuchen, indexAction () von Mage_Checkout :: CartController.php zu überschreiben.
Max
In 1.9.4.2 löst dies einen Fehler für mich aus. Der Controller wirft einen 404. Vielleicht gibt es jetzt einen anderen Weg, dies zu tun? Es passiert mir, wenn ich einen Checkout-Controller überschreibe
gabtzi
0

In meiner Erweiterung onestepcheckout, Konfigurationsdatei: 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>

Ich habe einen Controller hinzugefügt

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

zum Überschreiben des Onepage-Core-Controllers

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

Dies ist der grundlegende Quellcode dieses übergeordneten Controllers:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Die Hauptsache, wenn wir Magento-Controller umschreiben, sollten wir den Original-Controller einbinden und ihn erweitern. Das hilft allem nativen Verhalten, bevor alle vorgefertigten Funktionen funktionieren.

phanvugiap
quelle
Nur wenn Sie sich bei Ihren überschriebenen Aktionen auf zusätzliche (geschützte) Methoden der ursprünglichen Klasse verlassen. Alle in Ihrem Controller fehlenden Aktionen werden vom ursprünglichen Controller ausgeführt. Beachten Sie, dass Sie den Controller technisch gesehen nicht umschreiben , sondern zur Liste der Handler für einen
Frontnamen
Völlig einverstanden, wir
leiten
-1

Ich habe Enterprise Wishlist Controller umgeschrieben.

In meinem 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>

Und in meiner IndexControllerunten stehenden Zeile hinzufügen:

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Sie können den Helper auch folgendermaßen umschreiben: /magento//a/91474/33509

vritika nigam
quelle