Tôi có một thực thể tùy chỉnh trong cài đặt magento 2 của tôi.
Và một trong các trường trong thực thể này thuộc loại multiselect và chứa danh sách tất cả các quốc gia.
Tôi đang sử dụng các thành phần ui cho mẫu quản trị viên của mình.
Vì có khoảng 200 bản ghi trong phần chọn, tôi không muốn có trường đa lựa chọn vì nó không dễ sử dụng.
Vì vậy, tôi đã tạo một trong những đa lựa chọn ưa thích tương tự như trường danh mục trong phần thêm / chỉnh sửa quản trị sản phẩm.
Nó trông đẹp hơn, nhưng tôi không thể đặt giá trị mặc định cho nó.
Đây là cấu hình của tôi (chú ý default
mục cấu hình):
<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>
Và tôi đang mong đợi 2 giá trị tôi đặt trong trường mặc định sẽ được chọn:
Nếu tôi biến phần tử thành một multiselect đơn giản, nó hoạt động độc đáo.
<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>
Tôi gắn với định dạng này cho default
cài đặt
<item name="default" xsi:type="string">RO,MD</item>
và cái này cũng:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Cũng đã thử với thẻ select
và multiselect
bên trong formElements
thẻ.
Tất cả những cố gắng của tôi đã kết thúc trong thất bại.
Sử dụng default
cài đặt trong bất kỳ loại trường nào khác, như được hướng dẫn ở đây (văn bản, chọn, ngày, ...) hoạt động độc đáo.
Bất kỳ đề nghị cho các lựa chọn ưa thích? Một cái gì đó tôi đã bỏ lỡ?
Lưu ý: Tôi biết rằng tôi có thể cung cấp một giá trị mặc định trong nhà cung cấp dữ liệu điền vào biểu mẫu, nhưng tôi đang cố gắng tránh điều này vì nó trông xấu và nó không thể mở rộng và không phù hợp với các trường còn lại.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
. Bạn cần một lớp tương tự thực hiện \Magento\Framework\Option\ArrayInterface
và có một phương thức được gọi là toOptionArray
trả về một mảng với các giá trị của bạn. mỗi phần tử từ mảng phải trông như thế này['value' => ..., 'label' => ...]