CMS页面上的Magento联系表单显示404错误

时间:2015-08-19 21:54:25

标签: magento magento-1.9

我将联系人form.phtml添加到cms页面,其中包含以下代码:

{{block type="core/template" name="contactForm" form_action="/contacts/index/post" template="contacts/form.phtml"}}

但是,当我提交联系表单时,它将显示404错误,因为URL被路由到www.domain.de/contacts/index/post,这不存在因为我使用URL重写商店代码(de / EN)。

所以路由应该转到www.domain.de/de/contacts/index/post

这仅在我按如下方式更改代码时有效:

{{block type="core/template" name="contactForm" form_action="http://domain.de/de/contacts/index/post" template="contacts/form.phtml"}}

由于我对magento很新,我没有找到解决方案,我不知道这可能是.htaccess文件的问题。

有没有人有相同的问题,知道如何解决它?

更新

只是为了确保我是否正确地做到了: 我使用以下内容创建了\app\code\local\MARG\ContactForm\etc\config.xml\

<config>
    <modules>
        <MARG_ContactForm>
            <version>0.0.1</version>
        </MARG_ContactForm>
    </modules>
    <global>
        <blocks>
            <ContactForm>
                <class>MARG_ContactForm_Block</class>
            </ContactForm>
        <blocks>
    </global>
</config>

然后我创建了app\code\local\MARG\ContactForm\Block\ContactForm.php内容:

class MARG_ContactForm_Block_ContactForm extends Mage_Core_Block_Template
{
   protected function_construct()
   {
       $this ->setTemplate('contacts/form.phtml');
       parent::_construct();
   }

    public function getFormAction()
    {
        return Mage::getUrl('*/*/post', array('_secure' => $this->getRequest()->isSecure()));
    }
}

app\etc\modules\MARG_ContactForm.xml中我放了内容:

<config>
    <modules>
        <MARG_ContactForm>
            <active>true</active>
            <codePool>local</codePool>
        </MARG_ContactForm>
    </modules>
</config>

在CMS页面中,我添加了{{block type="MARG/ContactForm" name="contactForm"}}

有什么我忽略的吗?

编辑:

我完全按照描述完成了,并将{{block type="ContactForm/ContactForm" name="contactForm"}}添加到CMS页面。但是它仍然显示例外的一个空白页.log说

exception 'Mage_Core_Exception' with message 'Invalid block type: Mage_ContactForm_Block_ContactForm' in C:\dev\plain\magento\app\Mage.php:595 Stack trace: 
#0 C:\dev\plain\magento\app\code\core\Mage\Core\Model\Layout.php(495): Mage::throwException('Invalid block t...') 
#1 C:\dev\plain\magento\app\code\core\Mage\Core\Model\Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('ContactForm/Con...', Array)

1 个答案:

答案 0 :(得分:0)

这里的问题是该块是Mage_Core_Block_Template类型,它没有将表单操作转换为完全限定的URL的功能。通常情况发生在Mage_Contacts_IndexController,但您的CMS页面当然没有使用该控制器。

解决方案是制作适合您目的的块类型。我假设您知道如何制作模块,并且它的名称是&#34;示例&#34;。

class Example_Example_Block_Contacts extends Mage_Core_Block_Template
{
    protected function _construct()
    {
        $this->setTemplate('contacts/form.phtml');
        parent::_construct();
    }

    public function getFormAction()
    {
        // copied from Mage_Contacts_IndexController::indexAction()
        return Mage::getUrl('contacts/index/post', array('_secure' => $this->getRequest()->isSecure()));
    }
}

这使您的CMS页面也更简单。它只需要包括:

{{block type="example/contacts" name="contactForm"}}