我使用Magento 2内置的Catalog Products List小部件将特色产品小部件添加到网站的主页。我希望做的是扩展vendor/magento/module-catolog/widget/etc/widget.xml
中找到的窗口小部件布局文件,以便在使用{{1}的cms块中添加此窗口小部件时添加另一个模板选项编辑。
现在,我的主题位于WYSIWIG
,我尝试将自己的app/design/frontend/Vendor/theme
文件放在widget.xml
,但似乎无法覆盖原始app/design/frontend/Vendor/theme/Magento_CatalogWidget/widget.xml
文件。
这是我的代码:
widget.xml
我试图在模板参数中添加一个选项,以便我可以选择一个"替代产品网格模板"插入小部件时。
这是来自<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
<widget id="products_list" class="Magento\CatalogWidget\Block\Product\ProductsList" is_email_compatible="true"
placeholder_image="Magento_CatalogWidget::images/products_list.png" ttl="86400">
<label translate="true">Catalog Products List</label>
<description translate="true">List of Products</description>
<parameters>
<parameter name="template" xsi:type="select" required="true" visible="true">
<label translate="true">Template</label>
<options>
<option name="default" value="product/widget/content/grid.phtml" selected="true">
<label translate="true">Products Grid Template</label>
</option>
<option name="default" value="product/widget/content/alternate-grid.phtml" selected="true">
<label translate="true">Alternate Products Grid Template</label>
</option>
</options>
</parameter>
</parameters>
</widget>
</widgets>
的原始.xml
文件:
magento-catalog-widget
我知道如果我成功扩展文件,这将有效,因为我已经尝试编辑原始文件,并在管理员中添加小部件时看到了我的新选项。显然这不是最佳实践,我希望widget.xml文件只能在我的自定义主题中扩展。
请注意,我的模板位于<?xml version="1.0" encoding="UTF-8"?>
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
<widget id="products_list" class="Magento\CatalogWidget\Block\Product\ProductsList" is_email_compatible="true"
placeholder_image="Magento_CatalogWidget::images/products_list.png" ttl="86400">
<label translate="true">Catalog Products List</label>
<description translate="true">List of Products</description>
<parameters>
<parameter name="title" xsi:type="text" required="false" visible="true">
<label translate="true">Title</label>
</parameter>
<parameter name="show_pager" xsi:type="select" visible="true"
source_model="Magento\Config\Model\Config\Source\Yesno">
<label translate="true">Display Page Control</label>
</parameter>
<parameter name="products_per_page" xsi:type="text" required="true" visible="true">
<label translate="true">Number of Products per Page</label>
<depends>
<parameter name="show_pager" value="1" />
</depends>
<value>5</value>
</parameter>
<parameter name="products_count" xsi:type="text" required="true" visible="true">
<label translate="true">Number of Products to Display</label>
<value>10</value>
</parameter>
<parameter name="template" xsi:type="select" required="true" visible="true">
<label translate="true">Template</label>
<options>
<option name="default" value="product/widget/content/grid.phtml" selected="true">
<label translate="true">Products Grid Template</label>
</option>
</options>
</parameter>
<parameter name="cache_lifetime" xsi:type="text" visible="true">
<label translate="true">Cache Lifetime (Seconds)</label>
<description translate="true">86400 by default, if not set. To refresh instantly, clear the Blocks HTML Output cache.</description>
</parameter>
<parameter name="condition" xsi:type="conditions" visible="true" required="true" sort_order="10"
class="Magento\CatalogWidget\Block\Product\Widget\Conditions">
<label translate="true">Conditions</label>
</parameter>
</parameters>
<containers>
<container name="content">
<template name="grid" value="default" />
</container>
<container name="content.top">
<template name="grid" value="default" />
</container>
<container name="content.bottom">
<template name="grid" value="default" />
</container>
</containers>
</widget>
</widgets>
内,我同时拥有app/design/frontend/Vendor/theme/Magento_CatalogWidget/templates/product/widget/content
和grid.phtml
。我没有将alternate-grid.phtml
放在alternate-grid.phtml
目录中,但是当我更改该目录中的原始magento_catalog_widget
文件(我的主题之外)时,我能够访问它。这就是为什么我相信这个问题是覆盖窗口小部件的布局文件的问题。
如果有人可以回答这个问题,我认为它对其他开发人员也非常有帮助,因为这样可以让开发人员在任何Magento内置小部件中自定义选项,而不会干扰基础框架。
答案 0 :(得分:1)
我知道这有点晚了,但我只是想出了办法,也许会对某人有所帮助。
文件app/design/frontend/Vendor/theme/etc/widget.xml
应该如下所示:
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
<widget id="products_list" class="Magento\CatalogWidget\Block\Product\ProductsList" is_email_compatible="true"
placeholder_image="Magento_CatalogWidget::images/products_list.png" ttl="86400">
<label translate="true">Catalog Products List</label>
<description translate="true">List of Products</description>
<parameters>
<parameter name="template" xsi:type="select" required="true" visible="true">
<label translate="true">Template</label>
<options>
<option name="default" value="product/widget/content/grid.phtml">
<label translate="true">Products Grid Template</label>
</option>
<option name="alternate_grid" value="product/widget/content/alternate-grid.phtml">
<label translate="true">Alternate Grid Template</label>
</option>
</options>
</parameter>
</parameters>
<containers>
<container name="content">
<template name="grid" value="default"/>
<template name="alternate_grid" value="alternate_grid"/>
</container>
<container name="content.top">
<template name="grid" value="default"/>
<template name="alternate_grid" value="alternate_grid"/>
</container>
<container name="content.bottom">
<template name="grid" value="default"/>
<template name="alternate_grid" value="alternate_grid"/>
</container>
</containers>
</widget>
模板文件应位于app/design/frontend/Vendor/theme/Magento_CatalogWidget/templates/product/widget/content/alternate-grid.phtml
并且不要忘记在创建/编辑module.xml之后清除缓存
答案 1 :(得分:0)
您需要创建app/design/frontend/Vendor/theme/etc/widget.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
<widget id="products_list" class="Magento\CatalogWidget\Block\Product\ProductsList" is_email_compatible="true"
placeholder_image="Magento_CatalogWidget::images/products_list.png" ttl="86400">
<label translate="true">Catalog Products List</label>
<description translate="true">List of Products</description>
<parameters>
<parameter name="template" xsi:type="select" required="true" visible="true">
<label translate="true">Template</label>
<option name="list" value="product/widget/content/alternate-grid.phtml">
<label translate="true">Alternate Products Grid Template</label>
</option>
</parameter>
</parameters>
</widget>
</widgets>