Reescribe el controlador magento


12

Necesito sobrescribir la acción llamada _initAction del controlador:

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

en mi propio módulo y controlador:

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

Ya probé diferentes formas de resolverlo: primer método donde <from>e <to>intenté diferentes combinaciones (Mostrando página 404 no encontrada):

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

Segundo método (página que muestra con ignorar mis reglas):

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

En mi controlador puse die ("ok"); Pero no está apareciendo. Tal vez alguien podría ayudar? Gracias.


¿Te acordaste de limpiar los cachés? Particularmente la caché de configuración?
Benubird

¿"Rewtire controller"? ¿Que es eso?
Buttle Butkus

Sí, mi caché si está apagado.
Stopper

Sobrescribir está bien? perdón por mi inglés =)
Stopper

Respuestas:


15

Usa el segundo método pero un poco modificado. Su XML debería verse así:

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

Ahora cree el archivo Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpcon este contenido:

<?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 qué es mejor requerir un archivo, a su manera o require_once (Mage :: getModuleDir ('controladores', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); Además, quiero saber si podemos reescribir el bloque y el controlador en un solo módulo o si tenemos que escribir módulos separados para escribir el bloque y el controlador.
Adnan

Ambas formas tienen el mismo resultado. Pero si quiere ser 100% políticamente correcto, use el método que mencionó. También puede usar el mismo módulo para reescribir bloques y controladores.
Marius

Esto parece no funcionar cuando intenta anular indexAction () de Mage_Checkout :: CartController.php.
Max

En 1.9.4.2 esto arroja un error para mí. El controlador arroja un 404. ¿Quizás haya una forma diferente de hacerlo ahora? Me está sucediendo al anular un controlador de pago
gabtzi

0

En mi extensión onestepcheckout, archivo de configuración: 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>

Agregué un controlador

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

para anular el controlador central de Onepage

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

Este es el código fuente básico de ese controlador principal:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

Lo principal que cuando reescribimos los controladores magento, debemos incluir el original y extenderlo, ayuda a todos los comportamientos nativos antes para que todas las características preconstruidas funcionen.


Solo si confía en métodos adicionales (protegidos) de la clase original en sus acciones anuladas. Todas las acciones que faltan en su controlador serán manejadas por el controlador original. Tenga en cuenta que técnicamente no reescribe el controlador, sino que lo agrega a la lista de controladores para un nombre principal
Fabian Schmengler el

Totalmente de acuerdo, en realidad lo redirigimos pero deberíamos extender el original para heredar cualquier código existente
phanvugiap

-1

Reescribí el controlador de la lista de deseos de la empresa.

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

Y en mi IndexControllerAgregar debajo de la línea:

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

También puede reescribir ayuda de esta manera: /magento//a/91474/33509

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.