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 default
ré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 select
et multiselect
à l'intérieur de la formElements
balise.
Tous mes essais ont échoué.
L'utilisation du default
paramè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\ArrayInterface
et possède une méthode appeléetoOptionArray
qui renvoie un tableau avec vos valeurs. chaque élément du tableau doit ressembler à ceci['value' => ..., 'label' => ...]
Réponses:
J'ai travaillé pour des catégories personnalisées, mais dans cette méthode, vous devez fournir des données sur les pays via la base de données, prendre une idée à partir de ce code et vous pouvez fournir des données à partir de Db ou de données statiques en étendant les données magento, j'espère que cela peut aider
Le code xml
Le code Cofig
La sortie ressemble à ceci
la source