覆盖Magento Contacts Controller

时间:2015-05-27 08:36:57

标签: php magento magento-1.9

我正在尝试覆盖Mage/Contacts/IndexController.php

我在本地创建了一个文件夹并创建了Mynamespace/CustomContacts/controllers/IndexController.php

<?php

require_once 'Mage/Contacts/controllers/IndexController.php';

class Mynamespace_CustomContacts_IndexController extends Mage_Contacts_IndexController {

    protected function indexAction () {
        die;
    }
}

我还将此代码放在Mynamespace/CustomContacts/etc/config.xml

<config>
    <frontend>
        <routers>
            <contacts>
                <args>
                     <modules>
                        <Mynamespace_CustomContacts before="Mage_Contacts">Mynamespace_CustomContacts</Mynamespace_CustomContacts>
                    </modules>
                </args>
            </contacts>
        </routers>
    </frontend>
</config>

我清理了缓存,但我死了;不起作用,

感谢您的帮助

4 个答案:

答案 0 :(得分:3)

1。最佳实践

您的config.xml文件如下所示:

<?xml version="1.0"?>
<config>
    <modules>
        <Mynamespace_CustomContacts>
            <version>0.1.0</version>
        </Mynamespace_CustomContacts>
    </modules>
    <frontend>
        <routers>
            <contacts>
                <args>
                    <modules>
                        <Mynamespace_CustomContacts before="Mage_Contacts">Mynamespace_CustomContacts</Mynamespace_CustomContacts>
                    </modules>
                </args>
            </contacts>
        </routers>
    </frontend>
</config>

2。糟糕的做法

您可以在app/local/Mage/Contacts/controllers/IndexController.php中移动控制器以进行硬覆盖。

不要忘记在app / etc / modules目录中的xml文件中启用模块

答案 1 :(得分:0)

通过此操作,它会覆盖IndexController.php中的Mage_Contacts http://www.amitbera.com/how-to-override-a-controller-in-magento/

答案 2 :(得分:0)

IndexController.php文件(本地/您的公司/您的block_name /控制器/

<?php
require_once Mage::getModuleDir('controllers','Mage_Contacts').DS.'IndexController.php';

class IGN_Siteblocks_IndexController extends Mage_Contacts_IndexController
{
    public function indexAction()
    {

    }
}

local / your_company / your_block_name / etc / config.xml

<contacts>
                <args>
                    <modules>
                        <siteblocks before="Mage_Contacts">IGN_Siteblocks</siteblocks>
                    </modules>
                </args>
            </contacts>

然后让我们创建您的示例代码:

class IGN_Siteblocks_IndexController extends Mage_Contacts_IndexController
{
   public function createAction()
{
    return $this->_redirect('noroute');
}
}

答案 3 :(得分:-1)

在得到答案之前,我想知道必须在config.xml文件中定义自定义模块。

我认为这里缺少。

添加

<modules>
        <Mynamespace_CustomContacts>
            <version>1.0.0</version>
        </Mynamespace_CustomContacts>
    </modules>

config.xml文件中的配置节点之后。

另外

<Mynamespace_CustomContacts before="Mage_Contacts">
    Mynamespace_CustomContacts
</Mynamespace_CustomContacts>`

它应该是小写字母,如下面

<mynamespace_customcontacts before="Mage_Contacts">
     Mynamespace_CustomContacts
</mynamespace_customcontacts>`

希望这能解决您的问题。