2013-06-25 2 views
0

Эти два файла:Override модуль Magento, никакого результата

  1. приложение/код/​​ядро ​​/ Mage/модуль/Контроллеры/SubscriberController.php
  2. приложение/код/​​местные/Magens/модуль/контроллеры/SubscriberController.php

Я пытаюсь не переопределить файл не (1), но результата нет, есть следующий код:.

приложение/код/​​местные/Magens/Информационный бюллетень/и т.д./конфигурации .xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <MageNS_Newsletter> 
      <version>0.0.1</version> 
     </MageNS_Newsletter> 
    </modules> 
    <global> 
     <controllers> 
      <Mage_Newsletter> 
       <rewrite> 
        <account>MageNS_Newsletter_Controllers_SubscriberController</account> 
       </rewrite> 
      </Mage_Newsletter> 
     </controllers> 
    </global> 
</config> 

и приложение/код/​​местные/Magens/Бытовки/Контроллеры/SubscriberController.php

require_once("Mage/Newsletter/controllers/SubscriberController.php"); 
class MageNS_Newsletter_SubscriberController extends Mage_Newsletter_SubscriberController 
{ 
    public function test{ 
     echo "HYLlkpkdpwqkdpqkdqpkdqpkdpqkd";die; 
    } 
} 

ответ

1

Action контроллеры инстанцируются и решены иначе, чем другие основные типы классов в Magento (блоков , помощники и модели):

  1. Переписать через конфигурацию XML может быть достигнуто, но с помощью другого механизма и соглашения
  2. Умышленный дизайн PSR-0-подобная автозагрузка не работает для классов контроллера в Magento.

Необходимо добавить контроллеров отдельного модуля в каталог под frontName перезаписываемого модуля:

<frontend><!-- match to original module config --> 
    <routers> 
     <newsletter><!-- match to original module config--> 
      <args> 
       <modules> 
        <MageNS before="Mage_Newsletter">MageNS_Module</MageNS> 
        <!-- 
         The above points to app/code/[codePool]/MageNS/Module/controllers/ 
         If the value were MageNS_Module_Rewrites then controller matching 
         would begin in app/code/[codePool]/MageNS/Module/controllers/Rewrites/ 
        --> 
       </modules> 
      </args> 
     </newsletter> 
    </routers> 
</frontend> 

Если вы посмотрите в Mage_Core_Controller_Varien_Router_Standard::collectRoutes() вы увидите [где этот узел оценивается добавить указанным каталог в список соответствующих каталогов перед контроллерами исходного модуля.

Дополнительное примечание: это не имеет существенного значения, но самым идеальным включают синтаксис для определения родительского класса будет выглядеть следующим образом:

include Mage::getModuleDir('controllers','Mage_Newsletter').DS.'SubscriberController.php'; 
class MageNS_Newsletter_SubscriberController extends Mage_Newsletter_SubscriberController 
{ 
    //Only methods ending in 'Action' can be invoked directly via HTTP request 
    // -------------------v 
    public function testAction 
    { 
     $this->getResponse()->setBody("HYLlkpkdpwqkdpqkdqpkdqpkdpqkd"); 
    } 
}