在主题中扩展Magento小部件布局

时间:2017-02-17 21:20:16

标签: xml magento layout widget

我使用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/contentgrid.phtml。我没有将alternate-grid.phtml放在alternate-grid.phtml目录中,但是当我更改该目录中的原始magento_catalog_widget文件(我的主题之外)时,我能够访问它。这就是为什么我相信这个问题是覆盖窗口小部件的布局文件的问题。

如果有人可以回答这个问题,我认为它对其他开发人员也非常有帮助,因为这样可以让开发人员在任何Magento内置小部件中自定义选项,而不会干扰基础框架。

2 个答案:

答案 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>