Przepisz kontroler magento

12

Muszę zastąpić akcję o nazwie _initAction z kontrolera:

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

do mojego własnego modułu i kontrolera:

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

Próbowałem już różne sposoby, aby rozwiązać go: Pierwsza metoda gdzie <from>i <to>próbowałem różnych kombinacji (wyświetlono 404 nie znaleziono strony):

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

Druga metoda (strona wyświetlana z ignorowaniem moich zasad):

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

W moim kontrolerze umieściłem die („ok”); Ale to się nie pojawia. Może ktoś mógłby pomóc? Dzięki.

Korek
źródło
Czy pamiętasz, aby wyczyścić skrzynki? W szczególności pamięć podręczna konfiguracji?
Benubird,
„Rewtire controller”? Co to jest?
Buttle Butkus,
Tak, moja pamięć podręczna, jeśli wyłączona.
Stopper
Zastąpienie jest w porządku? przepraszam za mój angielski =)
Stopper
Faceci, proszę odpowiedzieć na mój wątek
Anup Chaudhary

Odpowiedzi:

15

Użyj drugiej metody, ale nieco zmodyfikowanej. Twój XML powinien wyglądać następująco:

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

Teraz utwórz plik Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpz tą zawartością:

<?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
źródło
@Marius, co jest lepsze, aby wymagać pliku, na swój sposób lub wymagany_once (Mage :: getModuleDir ('kontrolery', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); dodatkowo chcę wiedzieć, czy możemy przepisać blok i kontroler w jednym module, czy musimy napisać osobne moduły, aby napisać blok i niż kontroler.
Adnan
Oba sposoby mają ten sam wynik. Ale jeśli chcesz być w 100% politycznie poprawny, użyj wspomnianej metody. Możesz także użyć tego samego modułu do przepisania bloków i kontrolerów.
Marius
Wydaje się, że to nie działa, gdy próbujesz przesłonić indexAction () Mage_Checkout :: CartController.php.
Maks.
W 1.9.4.2 jest to dla mnie błąd. Kontroler rzuca 404. Być może jest teraz inny sposób na zrobienie tego? Zdarza mi się to, gdy zastępuję kontroler kasy
gabtzi,
0

W moim rozszerzeniu onestepcheckout plik konfiguracyjny: 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>

Dodałem kontroler

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

do przesłaniania kontrolera podstawowego Onepage

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

To jest podstawowy kod źródłowy tego nadrzędnego kontrolera:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Najważniejsze, że kiedy przepisujemy kontrolery magento, powinniśmy dołączyć oryginalny i rozszerzyć z niego, to pomaga wszystkim natywnym zachowaniom wcześniej, aby wszystkie gotowe funkcje działały.

phanvugiap
źródło
Tylko jeśli polegasz na dodatkowych (chronionych) metodach oryginalnej klasy w swoich przesłoniętych działaniach. Wszystkie akcje brakujące w twoim kontrolerze będą obsługiwane przez oryginalny kontroler. Należy pamiętać, że technicznie nie przepisujesz kontrolera, ale dodajesz go do listy programów obsługi dla imienia i nazwiska
Fabian Schmengler
Całkowicie się zgadzamy, faktycznie zmieniamy jego trasę, ale powinniśmy rozszerzyć oryginalny kod o dziedziczenie dowolnego istniejącego kodu
phanvugiap,
-1

Przepisałem kontroler listy życzeń dla przedsiębiorstw.

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

I w mojej IndexControllerlinii Dodaj poniżej:

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Możesz również przepisać pomocnika w ten sposób: /magento//a/91474/33509

Vritika Nigig
źródło