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 chamadotoOptionArray
que retorne uma matriz com seus valores. cada elemento da matriz deve ter a seguinte aparência['value' => ..., 'label' => ...]
Respostas:
Eu trabalhei para categorias personalizadas, mas neste método você precisa fornecer dados de países via banco de dados, ter uma ideia desse código e fornecer dados de Db ou Static Data estendendo os dados do magento. Espero que ajude
O código xml
O Código Cofig
A saída é assim
fonte