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

问题描述 投票:1回答:3

我正在为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放在正确的文件中,但我不知道使用巫文件,否则在互联网上找不到这两个提示。

有人可以帮我吗?

php magento
3个回答
1
投票

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

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

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

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


0
投票

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

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

-1
投票

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

另外我相信不支持手柄<cms_page>。最好通过将xml放在该CMS页面的“设计”选项卡下的布局更新部分中来引用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并不关心你所谓的它,但我显然会推荐合乎逻辑的东西!

© www.soinside.com 2019 - 2024. All rights reserved.