J'ai une entité personnalisée dans mon installation de magento 2.
Et l'un des champs de cette entité est de type multisélection et contient la liste de tous les pays.
J'utilise les composants ui pour mon formulaire d'administration.
Puisqu'il y a environ 200 enregistrements dans la sélection, je ne veux pas avoir un champ multisélection car ce n'est pas si facile à utiliser.
J'ai donc créé une de ces multisélection fantaisistes similaires au champ des catégories dans la section d'administration du produit.
Il semble plus joli, mais je ne peux pas lui attribuer de valeur par défaut.
Voici ma configuration (notez l' defaultélément de configuration):
<field name="affected_countries" formElement="select" component="Magento_Ui/js/form/element/ui-select" sortOrder="100">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="source" xsi:type="string">article</item>
<item name="filterOptions" xsi:type="boolean">true</item>
<item name="chipsEnabled" xsi:type="boolean">true</item>
<item name="disableLabel" xsi:type="boolean">true</item>
<item name="default" xsi:type="string">RO,MD</item>
</item>
</argument>
<settings>
<elementTmpl>ui/grid/filters/elements/ui-select</elementTmpl>
<dataType>text</dataType>
<label translate="true">Affected Countries</label>
<dataScope>affected_countries</dataScope>
<componentType>field</componentType>
</settings>
<formElements>
<select>
<settings>
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
</settings>
</select>
</formElements>
</field>
Et je m'attends à ce que les 2 valeurs que j'ai placées dans le champ par défaut soient sélectionnées:
Si je transforme l'élément en une simple sélection multiple, cela fonctionne bien.
<field name="affected_countries" formElement="multiselect" sortOrder="100">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="source" xsi:type="string">article</item>
<item name="default" xsi:type="string">RO,MD</item>
</item>
</argument>
<settings>
<dataType>text</dataType>
<label translate="true">Affected Countries</label>
<dataScope>affected_countries</dataScope>
</settings>
<formElements>
<multiselect>
<settings>
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
</settings>
</multiselect>
</formElements>
</field>
J'ai attaché avec ce format pour le defaultréglage
<item name="default" xsi:type="string">RO,MD</item>
et celui-ci aussi:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
A également essayé avec la balise selectet multiselectà l'intérieur de la formElementsbalise.
Tous mes essais ont échoué.
L'utilisation du defaultparamètre dans tout autre type de champs, comme indiqué ici (texte, sélection, date, ...) fonctionne bien.
Une suggestion pour les sélections de fantaisie? Quelque chose que j'ai raté?
Remarque: je sais que je peux fournir une valeur par défaut dans le fournisseur de données qui remplit le formulaire, mais j'essaie d'éviter cela car il semble laid et ce n'est pas extensible et pas cohérent avec le reste des champs.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>. Vous avez besoin d'une classe similaire qui implémente \Magento\Framework\Option\ArrayInterfaceet possède une méthode appelée toOptionArrayqui renvoie un tableau avec vos valeurs. chaque élément du tableau doit ressembler à ceci['value' => ..., 'label' => ...]



