Question bonus MageStackDay pour 500pts Bounty ET la possibilité de gagner une licence Z-Ray gratuite pendant un an. Plus d'informations peuvent être trouvées >> ici <<
Les questions sont fournies / inspirées par le développeur principal de Magento 2, Anton Kril.
Question:
Je crée une extension qui a un ensemble distinct de configurations.
Cela signifie que je ne peux pas utiliser config.xml
ou routes.xml
ou fieldset.xml
ou tout autre fichier de configuration xml que magento possède.
Exemple.
Disons que je définis une configuration de «table» qui a des lignes et des colonnes. Je pourrais utiliser ce xml ci-dessous. (appelez ça 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>
Mais si une autre extension contient, table.xml
je veux qu'elle soit récupérée par le lecteur de configuration et les 2 fichiers XML ou plus doivent être fusionnés. Je veux dire, si le deuxième fichier ressemble à ceci
<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>
le résultat sera que la deuxième colonne est ajoutée à la première ligne et la valeur de attr1
est remplacée par le deuxième 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>
Dans Magento 1, j'aurais pu le faire en appelant
$merged = Mage::getConfig()->loadModulesConfiguration('table.xml')
->applyExtends();
Comment puis-je faire de même pour Magento 2?
Dom
un exemple de classe. J'ai commencé à travailler sur la réponse en utilisant laReader
classe. En attendant, j'ai rafraîchi la page de questions et j'ai réalisé que vous l'aviez fait :-) +1