Uma dúvida comum no Magento é sobre a reescrita de controllers. Eu mesmo sempre me esqueço da forma correta de fazer. Existem muitas formas que funcionam, mas certamente há um jeito melhor e menos intrusivo do que o praticado por aí, que muitas vezes contempla até includes do controller original dentro da sua classe.
Uma simulação simples seria para sobrescrever o SubscriberController do módulo Mage_Newsletter (aquele que cuida das assinaturas de newsletter do site). A forma correta seria criarmos nosso módulo que fará essa reescrita do método desejado dentro do SubscriberController do Magento. Geralmente no caso desse controller específico geralmente queremos sobrecrever o método newAction(), que cuida das novas assinaturas da newsletter.
Para isso, criamos um módulo qualquer e no seu config.xml colocamos:
<config> <frontend> <routers> <newsletter> <args> <modules> <MeuNamespace_MeuModulo before="Mage_Newsletter">MeuNamespace_MeuModulo</MeuNamespace_MeuModulo> </modules> </args> </newsletter> </routers> </frontend> </config>
Então criamos um arquivo chamado SubscriberController.php dentro de MeuNamespace/MeuModulo/controllers. Ele não precisará estender o SubscriberController original. Poderá simplesmente ficar assim:
<?php class MeuNamespace_MeuModulo_SubscriberController extends Mage_Core_Controller_Front_Action{ public function newAction(){ //código que sobrescreveria o metodo newAction } }
A partir de então, ao chamarmos www.nossaloja.com/newsletter/subscriber/new, nosso método passará a ser chamado no lugar do padrão. Os demais métodos que não sobrescrevermos continuam sendo chamados normalmente.
Always write in english phwwww