我想在联系表格发送的联系电子邮件中包含访问者最近查看的产品列表。我知道如何修改电子邮件模板,如下所示:
<tr>
<td><b>{{trans "Product URLs"}}</b></td>
<td>{{var data.product_urls}}</td>
</tr>
我可以将此代码添加到我的模板contact_index_index.xml,从而在联系表单上显示"最近查看的产品"小部件
<referenceContainer name="form.additional.info">
<block class="MagentoCatalogBlockWidgetRecentlyViewed" name="recently_viewed_products" template="Magento_Catalog::product/widget/viewed/grid.phtml" after="-">
<arguments>
<argument name="uiComponent" xsi:type="string">widget_recently_viewed</argument>
<argument name="page_size" xsi:type="number">12</argument>
<argument name="show_attributes" xsi:type="string">name,image,price,learn_more</argument>
<argument name="show_buttons" xsi:type="string">add_to_cart</argument>
</arguments>
</block>
</referenceContainer>
我认为这是使用旧小部件的替代方案:
<referenceContainer name="form.additional.info">
<block class="MagentoReportsBlockProductWidgetViewed" after="-" name="recently_viewed" cacheable="false" template="Magento_Reports::widget/viewed/content/viewed_grid.phtml">
<action method="setPageSize">
<argument name="page_size" xsi:type="number">12</argument>
</action>
</block>
</referenceContainer>
但是,当我们发布联系表时,我如何提交产品列表?
我只需要包含产品 ID、SKU、名称或 URL 的列表。
更新: 我正在取得进展。 在我的主题中,我覆盖了Magento_Reports/templates/widget/viewed/content/viewed_grid.phtml 所以现在我可以像这样提取所需的数据:
$product_urls = '';
$product_ids = '';
$product_skus = '';
然后紧跟在"foreach"语句之后:
<?php
if ($iterator > 1) {
$product_urls .= ',';
$product_ids .= ',';
$product_skus .= ',';
}
$product_urls .= $block->getProductUrl($_item);
$product_ids .= $_item->getId();
$product_skus .= $_item->getSku();
?>
这给了我逗号分隔的列表。现在,我将添加隐藏控件以使用表单提交数据...
Doh!我找到了一种使用Magento管理员用一行代码解决整个问题的简单方法:
1)转到Magento管理员,市场营销,电子邮件模板
2) 添加新模板
3) 加载联系表单模板
4) 模板名称 ="我的联系表">
5) 将以下代码添加到模板内容:
{{block class="Magento\Reports\Block\Product\Widget\Viewed" template="Magento_Reports::widget/viewed/content/viewed_grid.phtml"}}
6) 保存模板
7)转到Magento管理员,商店,配置,常规,联系人,电子邮件选项
8) 电子邮件模板 ="我的联系表格">
粗糙但有效!