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' defaultelemento 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' defaultimpostazione
<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 selecte multiselectall'interno del formElementstag.
Tutti i miei tentativi sono falliti.
L'uso defaultdell'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\ArrayInterfacee abbia un metodo chiamato toOptionArrayche restituisce un array con i propri valori. ogni elemento dell'array deve apparire così['value' => ..., 'label' => ...]



