Pregunta de bonificación MageStackDay por 500 puntos Bounty Y la posibilidad de ganar una licencia gratuita de Z-Ray por un año. Más información se puede encontrar >> aquí <<
Las preguntas son proporcionadas / inspiradas por el desarrollador principal de Magento 2, Anton Kril.
Pregunta:
Estoy creando una extensión que tiene un conjunto separado de configuraciones.
Esto significa que no pueden utilizar config.xml
o routes.xml
o fieldset.xml
o cualquier otro archivo de configuración XML Magento tiene.
Ejemplo.
Digamos que estoy definiendo una configuración de 'tabla' que tiene filas y columnas. Podría usar este xml a continuación. (llámalo 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>
Pero si otra extensión contiene table.xml
, quiero que sea recogida por el lector de configuración y los 2 o más archivos xml deben fusionarse. Quiero decir, si el segundo archivo se ve así
<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>
el resultado será que la segunda columna se agrega a la primera fila y attr1
el segundo xml sobrescribe el valor de :
<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>
En Magento 1 podría haber hecho esto simplemente llamando
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
¿Cómo puedo hacer lo mismo para Magento 2?
Dom
un ejemplo de clase. Comencé a trabajar en la respuesta utilizando laReader
clase. Mientras tanto, actualicé la página de preguntas y me di cuenta de que hiciste eso :-) +1