2014-05-15 62 views
0

我现在有点儿尴尬,现在有点扯掉我的脑袋。我试图在Magento的后端管理中重写一个控制器方法来允许一些额外的功能。这是我想要应用我的覆盖的url路径。 <Magento root path>/index.php/admin/iBanners_banner/edit/id/2/key/4c9796d89ba5e8847e4ce8c893cd6901/Magento覆盖后台管理员中的分机控制器

以下是原始插件的admin分段路由器xml,它存在于它们的config.xml文件中。

<admin> 
    <routers> 
     <adminhtml> 
      <args> 
       <modules> 
        <ibanners before="Mage_Adminhtml">Fishpig_iBanners_Adminhtml</ibanners> 
       </modules> 
      </args> 
     </adminhtml> 
    </routers> 
</admin> 

这是我的控制器类与我需要重写适当的编辑方法。此文件位于下面的目录结构:app/code/local/Leafcutter/Ibanners/controllers/Adminhtml/Ibanners/BannerController.php

 <?php 

    require_once("Fishpig/IBanners/controllers/Adminhtml/IBanners/BannerController.php"); 
    class Leafcutter_iBanners_Adminhtml_iBanners_BannerController extends Fishpig_iBanners_Adminhtml_iBanners_BannerController 
    { 
     public function _construct(){ 
      Mage::log('Using Leafcutter Extension'); 
      parent::_construct(); 
     } 
     public function editAction() 
     { 
      die('Leafcurtter has been returned'); 
     } 
} 

就好像你去这个网址编辑你所期望的,我修改编辑功能应该与消息死去。

我也应用了我认为是我的扩展的config.xml文件中admin分段路由器xml代码的适当位。现在当我刷新页面或者我注销并重新登录到后端时。我的扩展的控制器不会覆盖原来的控制器,并且原来的控制器加载,就好像我的版本根本不存在一样。

下面的2个片段是我试图覆盖原始扩展的控制器的示例,它们都无法正常工作,但它是所有失败尝试实现此功能的示例。

<admin> 
      <routers> 
       <adminhtml> 
        <args> 
         <modules> 
          <ibanners before="Mage_Adminhtml">Leafcutter_iBanners_Adminhtml</ibanners> 
         </modules> 
        </args> 
       </adminhtml> 
      </routers> 
     </admin> 

     <admin> 
      <routers> 
       <ibanners> 
        <args> 
         <modules> 
          <Leafcutter_iBanners before="Fishpig_iBanners">Leafcutter_iBanners_Adminhtml</Leafcutter_iBanners> 
         </modules> 
        </args> 
       </ibanners> 
      </routers> 
     </admin> 

除非如果严格也不可能在所有覆盖的延伸的后端控制器和我的解决方案从一开始就存在缺陷,如果有人能帮助我尤其是看着我的配置XML我的管理路由器代码,那么这将是大。因为我不想对原始扩展应用黑客攻击,如果提供绝对没有选择的话,我可能必须这样做。提前致谢。

回答

1

覆盖可能是用于替换控制器类的错误词。最好将这些配置看作是“将模块的控制器添加为特定URL路径的选项”。考虑到这一点,有X个原因可能会出错。

  1. 您的配置是错误的/不正确

  2. 的Magento首先找到Fishpig模块中的控制器。

  3. Magento的找到你的配置,却找不到一个多数民众赞成正确命名

app/code/core/Mage/Core/Controller/Varien/Router/Standard.php_validateControllerClassName方法是一个伟大的地方开始调试这些事情控制器。一些var_dump调试在那里会告诉你为什么Magento的接受或拒绝特定模块的控制器配置(或者如果它从来没有发现它摆在首位)

+0

艾伦是对的.................. –

+0

_validateControllerClassName这个函数真的很有用 – huzefam

0

试试下面

<admin> 
      <routers> 
      <adminhtml> 
       <args> 
        <modules> 
         <Leafcutter_Ibanners before="Fishpig_IBanners">Leafcutter_Ibanners</Leafcutter_Ibanners> 
        </modules> 
       </args> 
      </adminhtml> 
      </routers> 
     </admin> 

对于COntollers

require_once 'Fishpig/IBanners/controllers/Adminhtml/IBanners/BannerController.php'; 
class Leafcutter_IBanners_Adminhtml_Ibanners_BannerController extends Fishpig_IBanners_Adminhtml_IBanners_BannerController 
{ 
    protected function _construct() 
    { 
     die('it works'); 
    } 
}