我正在为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放在正确的文件中,但我不知道使用巫文件,否则在互联网上找不到这两个提示。
有人可以帮我吗?
您可以使用CMS内容框中的CMS标记将联系表单添加到任何CMS页面:
{{block type="core/template" name="contactForm" template="contacts/form.phtml"}}
您可以创建一个新页面,然后插入该代码段以在此新页面上显示联系表单。
您也可以制作form.phtml的副本并根据需要进行修改,并更新标签代码以使用新模板。
请使用以下功能显示内部模板。
<?php echo $this->getLayout()->createBlock("Magento\Framework\View\Element\Template")->setTemplate("Magento_Contact::form.phtml")->toHtml(); ?>
你不能只创建一个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并不关心你所谓的它,但我显然会推荐合乎逻辑的东西!