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.xml
o routes.xml
o fieldset.xml
o 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.xml
voglio 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 attr1
verrà 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?
Dom
esempio di classe. Ho iniziato a lavorare sulla risposta utilizzando laReader
classe. Nel frattempo ho aggiornato la pagina delle domande e ho capito che l'hai fatto :-) +1