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 default
item 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 default
configuraçã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 select
e multiselect
dentro formElements
dela.
Todas as minhas tentativas terminaram em fracasso.
Usar a default
configuraçã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\ArrayInterface
e tenha um método chamado toOptionArray
que retorne uma matriz com seus valores. cada elemento da matriz deve ter a seguinte aparência['value' => ..., 'label' => ...]