我正在使用Magento 2的内置Catalog Products List小部件将特色产品小部件添加到站点的主页。我希望做的是扩展在vendor/magento/module-catolog/widget/etc/widget.xml
中找到的小部件布局文件,以便在使用WYSIWIG
编辑器在cms块中添加此小部件时,我可以添加另一个模板选项。
现在,我有一个位于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
文件:
<?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>
我知道如果我成功扩展文件,这将有效,因为我已经尝试编辑原始文件,并在管理员中添加小部件时看到了我的新选项。显然这不是最佳实践,我希望widget.xml文件只能在我的自定义主题中扩展。
请注意,我的模板放在app/design/frontend/Vendor/theme/Magento_CatalogWidget/templates/product/widget/content
中,我有grid.phtml
和alternate-grid.phtml
。我没有将alternate-grid.phtml
放在magento_catalog_widget
目录中,但是当我更改该目录中的原始widget.xml
文件(我的主题之外)时,我能够访问它。这就是为什么我相信这个问题是覆盖小部件的布局文件的问题。
如果有人能够回答这个问题,我认为它对其他开发人员也非常有帮助,因为这将允许开发人员在任何Magento内置小部件中自定义选项,而不会干扰基础框架。
你需要创建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>