Я добавляю виджет с признаками продуктов на домашнюю страницу сайта, используя встроенный виджет «Каталог продуктов» Magento 2. То, что я надеюсь сделать, это расширить файл макета виджета, найденный в vendor/magento/module-catolog/widget/etc/widget.xml
, чтобы добавить дополнительный шаблон при добавлении этого виджета в блок cms с редактором WYSIWIG
.Расширение макета виджета Magento в теме
Прямо сейчас, у меня есть тема, расположенная в 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 без вмешательства в базовую инфраструктуру.