Eu tenho uma entidade personalizada na minha instalação do magento 2.
E um dos campos nesta entidade é do tipo multiselecionado e contém a lista de todos os países.
Estou usando os componentes da interface do usuário no meu formulário de administração.
Como existem cerca de 200 registros no select, não quero ter um campo de seleção múltipla, porque não é tão fácil de usar.
Então, criei uma daquelas multiselecionadas sofisticadas, semelhantes ao campo de categorias na seção Adicionar / editar administração do produto.
Parece melhor, mas não posso definir um valor padrão para ele.
Aqui está minha configuração (observe o defaultitem de configuração):
<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 espero que os 2 valores que coloquei no campo padrão sejam selecionados:
Se eu transformar o elemento em uma simples seleção múltipla, ele funcionará bem.
<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>
Eu amarrei com esse formato para a defaultconfiguração
<item name="default" xsi:type="string">RO,MD</item>
e este também:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Também tentei com a tag selecte multiselectdentro formElementsdela.
Todas as minhas tentativas terminaram em fracasso.
Usar a defaultconfiguração em qualquer outro tipo de campo, conforme as instruções aqui (texto, seleção, data, ...) funciona bem.
Alguma sugestão para a fantasia seleciona? Algo que eu perdi?
Nota: Eu sei que posso fornecer um valor padrão no provedor de dados que preenche o formulário, mas estou tentando evitar isso, pois parece feio e não é tão extensível nem consistente com o restante dos campos.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>. Você precisa de uma classe semelhante que implemente \Magento\Framework\Option\ArrayInterfacee tenha um método chamado toOptionArrayque retorne uma matriz com seus valores. cada elemento da matriz deve ter a seguinte aparência['value' => ..., 'label' => ...]



