2017-02-17 37 views
1

Я добавляю виджет с признаками продуктов на домашнюю страницу сайта, используя встроенный виджет «Каталог продуктов» 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 без вмешательства в базовую инфраструктуру.

ответ

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>