Magento覆盖后端管理中的扩展控制器

时间:2014-05-15 00:02:34

标签: php magento

我现在有点在泡菜,有点撕裂我的头。我试图覆盖Magento的后端管理员中的控制器方法,以允许一些额外的功能。这是我试图应用我的覆盖的url路径。 <Magento root path>/index.php/admin/iBanners_banner/edit/id/2/key/4c9796d89ba5e8847e4ce8c893cd6901/

以下是config.xml文件中存在的原始插件的admin片段路由器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文件中应用了我认为是管道片段路由器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中查看我的管理路由器代码,那就太棒了。因为我不想对原始扩展应用hack,如果绝对没有选择,我可能不得不这样做。提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

  2. Magento首先在Fishpig模块中找到一个控制器。

  3. Magento找到您的配置,但找不到正确命名的控制器

  4. _validateControllerClassName中的app/code/core/Mage/Core/Controller/Varien/Router/Standard.php方法是开始调试这些事情的好地方。在那里进行一些var_dump调试会告诉你为什么Magento接受或拒绝某个模块的控制器配置(或者如果它从未在第一时间找到它)

答案 1 :(得分: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');
    }
}