【问题标题】:Magento contact form on CMS page shows 404 errorCMS 页面上的 Magento 联系表显示 404 错误
【发布时间】:2015-08-19 21:54:24
【问题描述】:

我使用以下代码将我的联系表单.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 /zh)。

所以路由应该去 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 页面。但是它仍然显示一个空白页 exception.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)

【问题讨论】:

  • 异常表明 Magento 没有将“ContactForm”解析为类名。在“系统 > 缓存管理”中禁用缓存。如果这样做没有帮助,请尝试将 &lt;ContactForm&gt; 标记更改为小写,并将 CMS 页面中的块类型更改为等效的。玩弄它来感受一下。
  • 两种方法都试过了,都不管用。你有没有让这个在你当地的magento系统中工作?我想知道我是否真的必须放弃这个
  • 我尝试复制粘贴您目前拥有的内容并需要修复这些问题;在 config.xml 中,结束块标记应该是 &lt;/blocks&gt;。在 ContactForm.php 中,“function”后面需要有一个空格。两个错字都没有导致您看到的错误消息。
  • 这些更改是否导致在 cms 页面中显示表单?因为在我的它仍然不会显示它
  • 确实如此。我只能建议您仔细检查您的打字,以防万一您犯了初学者的错误。

标签: magento magento-1.9


【解决方案1】:

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

解决方案是制作适合您目的的块类型。我假设你知道如何制作一个模块并且它的名字是“example”。

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"}}

【讨论】:

  • 我现在已经创建了一个模块,但是我必须将您发布的上层代码放在哪里?抱歉,我是第一次创建模块
  • 我做了以下事情:我创建了一个模型,并在您上面发布的内容中添加了 Modulename/ContactForm/Block/ContactForm.php(将 Example_Example_Block_Contacts 修改为 ..._Block_ContactForm)并试图把它像这样进入我的 cms 页面:{{block type="Modulename/contactform" name="contactForm"}} 但它没有在我的 CMS 页面上显示表单
  • 如果您还没有这样做,请在“系统 > 配置 > 开发人员 > 日志设置”中打开登录,然后查看“var/log”目录以获取可能的线索。
  • 你知道我能做些什么吗?我在最初的问题中添加了信息
  • 我刚刚意识到 getFormAction 返回了错误的 URL。
猜你喜欢
  • 2013-08-27
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多