【问题标题】:Override Magento Contacts Controller覆盖 Magento 联系人控制器
【发布时间】:2015-05-27 08:36:57
【问题描述】:

我正在尝试覆盖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>

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

感谢您的帮助

【问题讨论】:

    标签: php magento magento-1.9


    【解决方案1】:

    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 文件中启用你的模块

    【讨论】:

    • 感谢您的回答,我的 XML 不完整,我同意并修复它!我也忘了启用该模块,我在 app/etc/modules 中创建了 Mynamespace_CustomContacts.xml 并使用以下代码:&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;config&gt; &lt;modules&gt; &lt;Mynamespace_CustomContacts&gt; &lt;active&gt;true&lt;/active&gt; &lt;codePool&gt;local&lt;/codePool&gt; &lt;/Mynamespace_CustomContacts&gt; &lt;/modules&gt; &lt;/config&gt; 但它并没有改变任何东西..知道我错过了什么吗?再次感谢您的宝贵时间
    • 你的 xml 文件看起来不错,除了 xml 声明中的 encoding="UTF-8"。尝试:&lt;?xml version="1.0" ?&gt; &lt;config&gt; &lt;modules&gt; &lt;Mynamespace_CustomContacts&gt; &lt;active&gt;true&lt;/active&gt; &lt;codePool&gt;local&lt;/codePool&gt; &lt;/Mynamespace_CustomContacts&gt; &lt;/modules&gt; &lt;/config&gt;
    【解决方案2】:

    通过这个,它会覆盖来自Mage_ContactsIndexController.php http://www.amitbera.com/how-to-override-a-controller-in-magento/

    【讨论】:

      【解决方案3】:

      IndexController.php 文件 (local/your_company/your_block_name/controllers/

      <?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');
      }
      }
      

      【讨论】:

        【解决方案4】:

        在得到答案之前,我想知道必须在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>`
        

        希望这能解决您的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 1970-01-01
          • 2016-10-10
          相关资源
          最近更新 更多