Бонусне питання MageStackDay за 500 бант Bounty та можливість виграти безкоштовну ліцензію Z-Ray на рік. Більше інформації можна знайти >> тут <<
Питання надає / надихає розробник ядра Magento 2 Антон Криль.
Питання:
Я створюю розширення, яке має окремий набір конфігурацій.
Це означає , що я не можу використовувати config.xml
або routes.xml
чи fieldset.xml
або будь-які інші конфігурації XML файли Magento має.
Приклад.
Скажімо, я визначаю конфігурацію "таблиця", що містить рядки стовпців. Я можу використовувати цей xml нижче. (зателефонуйте table.xml
)
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="path/to/table.xsd">
<row id="row1">
<column id="col1" sort="10" attr1="val1">
<label>Col 1</label>
</column>
</row>
<row id="row2">
<column id="col1" sort="10" attr1="val1">
<label>Col 1</label>
</column>
<column id="col2" sort="20" disabled="true" attr1="val2" >
<label>Col 2</label>
</column>
<column id="col3" sort="15" attr1="val1">
<label>Col 3</label>
</column>
</row>
</table>
Але якщо інше розширення містить, table.xml
я хочу, щоб його забрав конфігураційний зчитувач, і 2 або більше файлів xml повинні бути об'єднані. Я маю на увазі, якщо другий файл виглядає так
<table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="path/to/table.xsd">
<row id="row1">
<column id="col2" sort="10" attr1="val2">
<label>Col 2</label>
</column>
</row>
<row id="row2">
<column id="col1" sort="10" attr1="val5" />
</row>
</table>
Результатом буде те, що другий стовпець буде доданий до першого рядка, а значення для attr1
буде перезаписано другим xml:
<table ....>
<row id="row1">
<column id="col1" sort="10" attr1="val1"> <!-- from first xml -->
<label>Col 1</label>
</column>
<column id="col2" sort="10" attr1="val2"><!-- from second xml-->
<label>Col 2</label>
</column>
</row>
<row id="row2">
<column id="col1" sort="10" attr1="val5"><!--they apear in both xmls with the same path and id and second one overrides the value for `attr1`-->
<label>Col 1</label>
</column>
<column id="col2" sort="20" disabled="true" attr1="val2"><!-- from first xml -->
<label>Col 2</label>
</column>
<column id="col3" sort="15" attr1="val1"><!-- from first xml -->
<label>Col 3</label>
</column>
</row>
</table>
У Magento 1 я міг би це зробити, просто зателефонувавши
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
Як я можу зробити те саме для Magento 2?
Dom
прикладом класу. Я почав працювати над використаннямReader
класу відповідей. Тим часом я оновив сторінку запитань і зрозумів, що ви це зробили :-) +1