我将联系人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)
答案 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"}}