Riscrivi il controller magento


12

Devo sovrascrivere un'azione chiamata _initAction dal controller:

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

nel mio modulo e controller:

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

Ho già provato diversi modi per risolverlo: primo metodo in cui <from>e <to>ho provato diverse combinazioni (Visualizzazione della pagina 404 non trovata):

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

Secondo metodo (la pagina mostra con ignora le mie regole):

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

Nel mio controller ho messo die ("ok"); Ma non si presenta. Forse qualcuno potrebbe aiutare? Grazie.


Ti sei ricordato di cancellare le cache? In particolare la cache di configurazione?
Benubird,

"Rewtire controller"? Cos'è quello?
Buttle Butkus,

Sì, la mia cache è disattivata.
Stopper

La sovrascrittura è ok? scusate il mio inglese =)
Stopper

Ragazzi, per favore, rispondete al mio thread
Anup Chaudhary,

Risposte:


15

Usa il secondo metodo ma un po 'modificato. Il tuo XML dovrebbe apparire così:

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

Ora crea il file Qbikz/ToolTip/controllers/Adminhtml/Catalog/Product/AttributeController.phpcon questo contenuto:

<?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 cosa è meglio richiedere un file, a modo tuo o request_once (Mage :: getModuleDir ('controller', 'Mage_Adminhtml'). DS.'Catalog'.DS.'Product'.DS.'AttributeController.php '); Inoltre voglio sapere se possiamo riscrivere il blocco e il controller in un singolo modulo o dobbiamo scrivere moduli separati per scrivere il blocco e il controller.
Adnan,

Entrambi i modi hanno lo stesso risultato. Ma se vuoi essere politicamente corretto al 100% usa il metodo che hai citato. Inoltre è possibile utilizzare lo stesso modulo per riscrivere blocchi e controller.
Marius

Questo sembra non funzionare quando si tenta di sovrascrivere indexAction () di Mage_Checkout :: CartController.php.
Max

In 1.9.4.2 questo sta generando un errore per me. Il controller lancia un 404. Forse c'è un modo diverso di farlo ora? Mi sta succedendo quando si
esegue l'

0

Nella mia estensione onestepcheckout, file di configurazione: 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>

Ho aggiunto un controller

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

per l'override del controller core Onepage

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

Questo è il codice sorgente di base di quel controller prevalente:

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

class Gurutheme_Onestepcheckout_OnepageController extends Mage_Checkout_OnepageController {

}

La cosa principale che quando riscriviamo i controller magento, dovremmo includere quello originale ed estenderlo da esso, aiuta tutti i comportamenti nativi prima che funzionino tutte le funzionalità predefinite.


Solo se fai affidamento su metodi aggiuntivi (protetti) della classe originale nelle tue azioni ignorate. Tutte le azioni mancanti nel controller saranno gestite dal controller originale. Nota che tecnicamente non riscrivi il controller ma lo aggiungi all'elenco dei gestori per un nome di
battesimo

Totalmente d'accordo, in realtà lo reindirizziamo, ma dovremmo estendere quello originale per ereditare qualsiasi codice esistente
phanvugiap

-1

Ho riscritto il controller della wishlist aziendale.

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

E nel mio IndexControllerAggiungi sotto la riga:

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

//before

class Namespace_Modulename_IndexController extends Enterprise_Wishlist_IndexController{}

Puoi anche riscrivere l'helper in questo modo: /magento//a/91474/33509

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.