1

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

小部件位于

app/
   code/
       local/
         CompanyName/
              WidgetName/

phtml文件位于

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

要加载我在 templatefile3.phtml 中添加的 magento 联系表

<?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 放入正确的文件中,但我不知道要使用其他文件,并且在互联网上找不到除这两个之外的任何其他提示。

有人可以帮我吗?

4

3 回答 3

1

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

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

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

您还可以复制 form.phtml 并根据需要对其进行修改,并更新标记代码以使用新模板。

于 2012-09-19T09:48:47.553 回答
0

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

       <?php echo $this->getLayout()->createBlock("Magento\Framework\View\Element\Template")->setTemplate("Magento_Contact::form.phtml")->toHtml(); ?>
于 2018-01-04T14:58:27.227 回答
-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 不在乎你怎么称呼它,但我显然会推荐一些合乎逻辑的东西!

于 2013-01-29T16:11:40.580 回答