Magento在自定义创建的小部件的phtml文件中联系表单

时间:2012-09-19 09:15:57

标签: php magento

我正在为Magento开发一个小部件,在这个小部件中我需要加载magento联系表单。我已经尝试了几种选择,但它们似乎都没有用。

小部件位于

app/
   code/
       local/
         CompanyName/
              WidgetName/

和phtml文件位于

app/
   design/
      frontend/
          default/
             default/
                 template/
                     templatename/
                           templatefile1.pthml
                           templatefile2.pthml
                           templatefile3.phtml

加载magento联系表单我在templatefile3.phtml中添加了这个

<?php echo $this->getChildHtml('contactForm') ?>

但它没有出现,即使将xml添加到2个文件后,我已将此行添加到app / design / frontend / base / default / layout / catalog.xml中,位于<reference name="content">

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

并将此代码添加到app / design / frontend / base / default / layout / default.xml(此文件甚至不存在)

<default>
<cms_page>
    <reference name="content">
        <block type="core/template" name="contactForm" as="contactForm" template="contacts/form.phtml">
            <action method='setBlockId'><block_id>contactForm</block_id></action>
        </block>
    </reference>
</cms_page>

我有一个想法,我不是把xml放在正确的文件中,但我不知道使用其他文件,并且在互联网上找不到这两个提示。

有人能帮助我吗?

3 个答案:

答案 0 :(得分:1)

您可以使用CMS内容框中的CMS标记将联系表单添加到任何CMS页面:

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

您可以创建新页面,然后插入该代码段以在此新页面上显示联系表单。

你也可以复制form.phtml并根据需要进行修改,并更新标签代码以使用新模板。

答案 1 :(得分:0)

请使用以下功能显示内部模板。

       <?php echo $this->getLayout()->createBlock("Magento\Framework\View\Element\Template")->setTemplate("Magento_Contact::form.phtml")->toHtml(); ?>

答案 2 :(得分:-1)

你不能只创建一个default.xml - 让Magento知道布局xml文件存在,你必须经历并创建一个模块并指定布局文件的位置。这是一个非常漫长的方式,试图实现你所需要的。

另外我认为不支持句柄<cms_page>。引用CMS页面中的块最好将xml放在该CMS页面的“设计”选项卡下的布局更新部分中。

因此,将联系表单放入CMS页面非常简单 - 再次使用布局更新工具。只需输入以下xml ...

<reference name="content">
    <block type="core/template" name="contactForm" template="contacts/form.phtml"/>
</reference>

请注意,您不需要布局句柄 - Magento当然已经知道您要插入内容的特定CMS页面,因为这是该页面的布局更新。因此,在上面您只是引用要添加的结构块(在本例中为内容),并告诉Magento添加contactForm块及其关联的模板位置。

之前我曾在使用此方法的网站上工作过。您可能会发现,一旦您将联系表单调用到CMS页面,尽管在浏览器中成功显示,表单实际上并未发布。实际上,只有在预期页面中使用时才会发送表单yoursite.com/contacts

简单修复。创建文件 app / design / frontend / YOUR-PACKAGE / YOUR-THEME / template / contacts / form.phtml ,并将所需内容从默认的form.phtml复制到其中。

从以下位置更改form.phtml文件底部的脚本:

<script type="text/javascript">
    var contactForm = new VarienForm('contactForm', true);
</script>

要:

<script type="text/javascript">
    elem = $("contactForm");
    elem.writeAttribute('action', '/contacts/index/post');
</script>

您的CMS页面联系表单现在将根据需要发布。

就像添加一样(您可能会或可能不会觉得这很有用)。

我需要CMS页面上的联系表单与联系人上显示的标准表单不同。使用上面的方法也很简单。

复制文件 app / design / frontend / YOUR-PACKAGE / YOUR-THEME / template / contacts / form.phtml 并重命名为 app / design / frontend / YOUR- PACKAGE / YOUR-THEME / template / contacts / customForm.phtml - 然后根据不同的领域进行必要的修改......

现在,您想要在CMS页面的布局更新中添加以下xml:

<reference name="content">
    <block type="core/template" name="customContactForm" template="contacts/customForm.phtml"/>
</reference>

就是这样。

注意块名称是如何改变的 - 块名称实际上可以是任何东西 - Magento并不关心你所谓的它,但我显然会推荐符合逻辑的东西!