Saya memiliki entitas khusus di Magento 2 saya instal.
Dan salah satu bidang dalam entitas ini adalah tipe multiselect dan berisi daftar semua negara.
Saya menggunakan komponen ui untuk formulir admin saya.
Karena ada sekitar 200 catatan dalam pilih, saya tidak ingin memiliki bidang multiseleksi karena tidak mudah digunakan.
Jadi saya membuat salah satu multiselek mewah yang mirip dengan bidang kategori di bagian admin tambah / edit produk.
Itu terlihat lebih bagus, tetapi saya tidak dapat menetapkan nilai default untuk itu.
Ini konfigurasi saya (perhatikan default
item konfigurasi):
<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>
Dan saya mengharapkan 2 nilai yang saya tempatkan di bidang default untuk dipilih:
Jika saya mengubah elemen menjadi multiselect sederhana itu berfungsi dengan baik.
<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>
Saya terikat dengan format ini untuk default
pengaturan
<item name="default" xsi:type="string">RO,MD</item>
dan yang ini juga:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Juga mencoba dengan tag select
dan multiselect
di dalam formElements
tag.
Semua percobaan saya berakhir dengan kegagalan.
Menggunakan default
pengaturan dalam jenis bidang apa pun lainnya, seperti yang diperintahkan di sini (teks, pilih, tanggal, ...) berfungsi dengan baik.
Ada saran untuk memilih yang mewah? Sesuatu yang saya lewatkan?
Catatan: Saya tahu saya bisa memberikan nilai default di penyedia data yang mengisi formulir, tapi saya mencoba untuk menghindari ini karena terlihat jelek dan tidak bisa diperluas dan tidak konsisten dengan bidang lainnya.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
. Anda memerlukan kelas serupa yang mengimplementasikan\Magento\Framework\Option\ArrayInterface
dan memiliki metode yang disebuttoOptionArray
yang mengembalikan array dengan nilai Anda. setiap elemen dari array harus terlihat seperti ini['value' => ..., 'label' => ...]
Jawaban:
Saya bekerja untuk kategori khusus tetapi dalam metode ini Anda harus memberikan data negara melalui basis data, mengambil gagasan dari kode ini dan Anda dapat memberikan data dari Db atau Data Statis dengan memperluas data magento, Semoga bermanfaat
Kode xml
Kode Cofig
Outputnya terlihat seperti ini
sumber