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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在主题中扩展Magento小部件布局相关的知识,希望对你有一定的参考价值。

我正在使用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="MagentoCatalogWidgetBlockProductProductsList" 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="MagentoCatalogWidgetBlockProductProductsList" 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="MagentoConfigModelConfigSourceYesno">
                <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="MagentoCatalogWidgetBlockProductWidgetConditions">
                <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.phtmlalternate-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="MagentoCatalogWidgetBlockProductProductsList" 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>

以上是关于在主题中扩展Magento小部件布局的主要内容,如果未能解决你的问题,请参考以下文章

Magento:如何将小部件放入布局 xml?

Magento 扩展如何从默认主题应用主题?

在 Qtabwidget 中扩展小部件

设计magento 2主题的布局

如何:为自定义小部件定义主题(样式)项

Magento 2 创建 Widget