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.

Tapón
fuente
¿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
Chicos, por favor contesten mi hilo- magento.stackexchange.com/questions/98758/…
Anup Chaudhary

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
fuente
@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.

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

vritika nigam
fuente