Magento 1.6.2-覆盖触点控制器的问题

Magento 1.6.2-覆盖触点控制器的问题,magento,Magento,好的,我已经设置了一个新模块来覆盖Contacts控制器,这样我就可以在其中添加一个时事通讯注册选项。我的设置如下: /app/code/local/MyNamespace/ContactsPlus/controllers/Contacts/IndexController.php: <?php # Controllers are not autoloaded so we will have to do it manually: require_once 'Mage/Contacts/con

好的,我已经设置了一个新模块来覆盖Contacts控制器,这样我就可以在其中添加一个时事通讯注册选项。我的设置如下:

/app/code/local/MyNamespace/ContactsPlus/controllers/Contacts/IndexController.php:

<?php
# Controllers are not autoloaded so we will have to do it manually:
require_once 'Mage/Contacts/controllers/IndexController.php';
class MyNameSpace_ContactsPlus_Contacts_IndexController extends Mage_Contacts_IndexController
{
    # Overloaded indexAction
    public function indexAction() {
        # Just to make sure
        error_log('Yes, I did it!');
        parent::indexAction();
    }
}
<?php
# Controllers are not autoloaded so we will have to do it manually:
require_once 'Mage/Contacts/controllers/IndexController.php';
class MyNameSpace_ContactsPlus_IndexController extends Mage_Contacts_IndexController
{
    # Overloaded indexAction
    public function indexAction() {
        # Just to make sure
        //die('Yes, I did it!');
        parent::indexAction();
    }
}
就是这句话:

        $this->getLayout()->getBlock('contactForm')->setFormAction( Mage::getUrl('*/*/post') );
不过,我不确定该从这里走到哪里,有一种猜测是,它无法对从Mage::getUrl('//post')返回的任何内容设置表单操作,但我正在抓紧救命稻草


任何建议的帮助都将不胜感激

好的,经过大量的研究、帮助和挫折,下面是我如何让它工作的:

首先,我的模块目录如下所示(请注意目录上的大写字母):

/app/code/local/MyNamespace/ContactsPlus/etc/

  • config.xml
/app/code/local/MyNamespace/ContactsPlus/controllers/

  • IndexController.php
/app/code/local/MyNamespace/ContactsPlus/Helper/

  • Data.php
现在查看配置文件:

/app/code/local/MyNamespace/ContactsPlus/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <mynamespace_ContactsPlus>
            <version>0.1.0</version>
        </mynamespace_ContactsPlus>
    </modules>
    <global>
        <rewrite>
            <mynamespace_contactsplus_contacts_index>
                <from><![CDATA[#^/contacts/index/#]]></from>
                <to>/contactsplus/contacts_index/</to>
            </mynamespace_contactsplus_contacts_index>
            <mynamespace_contactsplus_contacts_index>
                <from><![CDATA[#^/contacts/#]]></from>
                <to>/contactsplus/contacts_index/</to>
            </mynamespace_contactsplus_contacts_index>            
        </rewrite>
    </global>
    <frontend>
        <routers>
            <mynamespace_contactsplus>
                <use>standard</use>
                <args>
                    <module>mynamespace_ContactsPlus</module>
                    <frontName>contactsplus</frontName>
                </args>
            </mynamespace_contactsplus>
        </routers>
    </frontend>    
</config>
<?xml version="1.0"?>
<config>
    <modules>
        <MyNameSpace_ContactsPlus>
            <version>0.1.0</version>
        </MyNameSpace_ContactsPlus>
    </modules>
    <frontend>
        <routers>

        <!-- Creates route to my module via /contactsplus/ - I used this for testing -->
            <contactsplus>
                <use>standard</use>
                <args>
                    <module>MyNameSpace_ContactsPlus</module>
                    <frontName>contactsplus</frontName>
                </args>
            </contactsplus>

        <!-- Sets Mage_Contacts route to MyNameSpace_ContactsPlus -->              
            <contacts>
                <args>
                    <modules>
                        <MyNameSpace_ContactsPlus before="Mage_Contacts">MyNameSpace_ContactsPlus</MyNameSpace_ContactsPlus>
                    </modules>
                </args>
            </contacts> 
        </routers>
    <!-- Sets layout config file (essential for this to work) -->   
        <layout>
            <updates>
                <contactsplus>
                    <file>contactsplus.xml</file>
                </contactsplus>
            </updates>
        </layout>        
    </frontend>
    <global>
    <!-- Sets a helper class for the module, when overriding contacts this is also essential. -->   
        <helpers>
            <contactsplus>
                <class>MyNameSpace_ContactsPlus_Helper</class>
            </contactsplus>
        </helpers>        
    </global>
</config>

0.1.0
标准

希望这对其他人有所帮助


现在,我要在新表单中添加一个时事通讯注册选项

好的,经过大量的研究、帮助和挫折,下面是我如何让它工作的:

首先,我的模块目录如下所示(请注意目录上的大写字母):

/app/code/local/MyNamespace/ContactsPlus/etc/

  • config.xml
/app/code/local/MyNamespace/ContactsPlus/controllers/

  • IndexController.php
/app/code/local/MyNamespace/ContactsPlus/Helper/

  • Data.php
现在查看配置文件:

/app/code/local/MyNamespace/ContactsPlus/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <mynamespace_ContactsPlus>
            <version>0.1.0</version>
        </mynamespace_ContactsPlus>
    </modules>
    <global>
        <rewrite>
            <mynamespace_contactsplus_contacts_index>
                <from><![CDATA[#^/contacts/index/#]]></from>
                <to>/contactsplus/contacts_index/</to>
            </mynamespace_contactsplus_contacts_index>
            <mynamespace_contactsplus_contacts_index>
                <from><![CDATA[#^/contacts/#]]></from>
                <to>/contactsplus/contacts_index/</to>
            </mynamespace_contactsplus_contacts_index>            
        </rewrite>
    </global>
    <frontend>
        <routers>
            <mynamespace_contactsplus>
                <use>standard</use>
                <args>
                    <module>mynamespace_ContactsPlus</module>
                    <frontName>contactsplus</frontName>
                </args>
            </mynamespace_contactsplus>
        </routers>
    </frontend>    
</config>
<?xml version="1.0"?>
<config>
    <modules>
        <MyNameSpace_ContactsPlus>
            <version>0.1.0</version>
        </MyNameSpace_ContactsPlus>
    </modules>
    <frontend>
        <routers>

        <!-- Creates route to my module via /contactsplus/ - I used this for testing -->
            <contactsplus>
                <use>standard</use>
                <args>
                    <module>MyNameSpace_ContactsPlus</module>
                    <frontName>contactsplus</frontName>
                </args>
            </contactsplus>

        <!-- Sets Mage_Contacts route to MyNameSpace_ContactsPlus -->              
            <contacts>
                <args>
                    <modules>
                        <MyNameSpace_ContactsPlus before="Mage_Contacts">MyNameSpace_ContactsPlus</MyNameSpace_ContactsPlus>
                    </modules>
                </args>
            </contacts> 
        </routers>
    <!-- Sets layout config file (essential for this to work) -->   
        <layout>
            <updates>
                <contactsplus>
                    <file>contactsplus.xml</file>
                </contactsplus>
            </updates>
        </layout>        
    </frontend>
    <global>
    <!-- Sets a helper class for the module, when overriding contacts this is also essential. -->   
        <helpers>
            <contactsplus>
                <class>MyNameSpace_ContactsPlus_Helper</class>
            </contactsplus>
        </helpers>        
    </global>
</config>

0.1.0
标准

希望这对其他人有所帮助

现在,我要在新表单中添加一个时事通讯注册选项

<?php
class MyNameSpace_ContactsPlus_Helper_Data extends Mage_Core_Helper_Abstract
{

}
<?xml version="1.0"?>
<config>
    <modules>
        <MyNameSpace_ContactsPlus>
            <active>true</active>
            <codePool>local</codePool>
        </MyNameSpace_ContactsPlus>
    </modules>
</config>  
<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="footer_links">
            <!-- <action method="addLink" translate="label title" module="contacts" ifconfig="contacts/contacts/enabled"><label>Contact Us</label><url>contacts</url><title>Contact Us</title><prepare>true</prepare></action>
         --></reference>
    </default>
    <contacts_index_index translate="label">
    <!-- had to comment this out in order to prevent a duplicate form issue, if anyone has a better method for this then I'd love to here it :) 
        <label>Contact Us Form</label>
        <reference name="head">
            <action method="setTitle" translate="title" module="contacts"><title>Contact Us</title></action>
        </reference>
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
            <action method="setHeaderTitle" translate="title" module="contacts"><title>Contact Us</title></action>
        </reference>
        <reference name="content">
            <block type="core/template" name="contactForm" template="contacts/form.phtml"/>
        </reference>
    -->
    </contacts_index_index>

    <!-- added this to rewrite contacts handle to the new modules handle -->
    <contacts_index_index>
        <update handle="contactsplus_index_index"/>
    </contacts_index_index>
</layout>
<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="footer_links">
            <!-- <action method="addLink" translate="label title" module="contacts" ifconfig="contacts/contacts/enabled"><label>Contact Us</label><url>contacts</url><title>Contact Us</title><prepare>true</prepare></action>
         --></reference>
    </default>
    <contactsplus_index_index translate="label">
        <label>Contact Us Form</label>
        <reference name="head">
            <action method="setTitle" translate="title" module="contactsplus"><title>Contact Us</title></action>
        </reference>
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-right.phtml</template></action>
            <action method="setHeaderTitle" translate="title" module="contactsplus"><title>Contact Us</title></action>
        </reference>
        <reference name="content">
            <block type="core/template" name="contactForm" template="contactsplus/custom_form.phtml"/>
        </reference>
    </contactsplus_index_index>

</layout>