Ho un'entità personalizzata nella mia installazione di Magento 2.
E uno dei campi in questa entità è di tipo multi-selezione e contiene l'elenco di tutti i paesi.
Sto usando i componenti dell'interfaccia utente per il mio modulo di amministrazione.
Dato che ci sono circa 200 record nella selezione, non voglio avere un campo a selezione multipla perché non è così facile da usare.
Così ho creato una di quelle fantastiche multiselect simili al campo delle categorie nella sezione di amministrazione del prodotto Aggiungi / Modifica.
Sembra più bello, ma non riesco a impostare un valore predefinito.
Ecco la mia configurazione (nota l' default
elemento di configurazione):
<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>
E mi aspetto che vengano selezionati i 2 valori che ho inserito nel campo predefinito:
Se trasformo l'elemento in una semplice selezione multipla, funziona perfettamente.
<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>
Ho legato con questo formato per l' default
impostazione
<item name="default" xsi:type="string">RO,MD</item>
e anche questo:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Provato anche con il tag select
e multiselect
all'interno del formElements
tag.
Tutti i miei tentativi sono falliti.
L'uso default
dell'impostazione in qualsiasi altro tipo di campo, come indicato qui (testo, seleziona, data, ...) funziona bene.
Qualche suggerimento per la fantasia seleziona? Qualcosa che mi mancava?
Nota: so di poter fornire un valore predefinito nel fornitore di dati che popola il modulo, ma sto cercando di evitarlo poiché sembra brutto e non è estensibile e non coerente con il resto dei campi.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
. È necessaria una classe simile che implementa \Magento\Framework\Option\ArrayInterface
e abbia un metodo chiamato toOptionArray
che restituisce un array con i propri valori. ogni elemento dell'array deve apparire così['value' => ..., 'label' => ...]