Domanda bonus MageStackDay per 500 punti Bounty E la possibilità di vincere una licenza Z-Ray gratuita per un anno. Maggiori informazioni possono essere trovate >> qui <<
Le domande sono fornite / ispirate dallo sviluppatore principale Magento 2 Anton Kril.
Domanda:
Sto creando un'estensione che ha un set separato di configurazioni.
Questo significa che non possono utilizzare config.xmlo routes.xmlo fieldset.xmlo qualsiasi altro file di configurazione XML Magento ha.
Esempio.
Diciamo che sto definendo una configurazione 'table' che ha righe e colonne. Potrei usare questo xml di seguito. (chiamalo 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>
Ma se contiene un'altra estensione, table.xmlvoglio che sia presa dal lettore di configurazione e che i 2 o più file XML debbano essere uniti. Voglio dire se il secondo file è simile al seguente
<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>
il risultato sarà che la seconda colonna verrà aggiunta alla prima riga e il valore per attr1verrà sovrascritto dal secondo 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>
In Magento 1 avrei potuto farlo semplicemente chiamando
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
Come posso fare lo stesso per Magento 2?
Domesempio di classe. Ho iniziato a lavorare sulla risposta utilizzando laReaderclasse. Nel frattempo ho aggiornato la pagina delle domande e ho capito che l'hai fatto :-) +1