Pytanie bonusowe MageStackDay za 500 punktów Bounty O możliwość wygrania bezpłatnej licencji Z-Ray na rok. Więcej informacji można znaleźć >> tutaj <<
Pytania zostały dostarczone / zainspirowane przez głównego programistę Magento 2, Anton Kril.
Pytanie:
Tworzę rozszerzenie, które ma osobny zestaw konfiguracji.
To znaczy, że nie można używać config.xml
lub routes.xml
lub fieldset.xml
lub inne pliki config xml magento ma.
Przykład.
Powiedzmy, że definiuję konfigurację „tabeli”, która ma wiersze i kolumny. Mógłbym użyć tego xml poniżej. (nazwij to 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>
Ale jeśli inne rozszerzenie zawiera table.xml
, chcę, aby zostało pobrane przez czytnik konfiguracji i 2 lub więcej plików XML powinno zostać scalonych. Mam na myśli to, czy drugi plik wygląda tak
<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>
w rezultacie druga kolumna zostanie dodana do pierwszego wiersza, a wartość dla attr1
zostanie zastąpiona przez drugi 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>
W Magento 1 mogłem to zrobić, dzwoniąc
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
Jak mogę zrobić to samo dla Magento 2?
Dom
przykładem klasy. Zacząłem pracować nad odpowiedzią, korzystając zReader
klasy. W międzyczasie odświeżyłem stronę pytań i zdałem sobie sprawę, że to zrobiłeś :-) +1