У моїй установці magento 2 у мене є власна сутність.
І одне з полів цієї сутності має тип мультиселекції та містить перелік усіх країн.
Я використовую ui-компоненти для своєї форми адміністратора.
Оскільки в обраному режимі є близько 200 записів, я не хочу мати багатоселекційне поле, тому що це не так просто у використанні.
Тож я створив один із цих фантазійних мультиселекцій, подібних до поля категорій у розділі "Адміністратор додавання / редагування продукту".
Це виглядає приємніше, але я не можу встановити для нього значення за замовчуванням.
Ось моя конфігурація (зверніть увагу на default
елемент конфігурації):
<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>
І я очікую, що будуть вибрані 2 значення, які я розмістив у полі за замовчуванням:
Якщо я перетворять елемент на простий мультиселектор, він чудово працює.
<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>
Я зв'язав цей формат для default
налаштування
<item name="default" xsi:type="string">RO,MD</item>
і цей також:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Також спробували з тегом select
і multiselect
всередині formElements
тегу.
Усі мої спроби закінчилися невдачею.
Використання default
налаштувань у будь-яких інших типах полів, як указано тут (текст, вибір, дата, ...), працює добре.
Будь-яка пропозиція для фантазії вибирає? Щось я пропустив?
Примітка. Я знаю, що можу надати значення за замовчуванням у постачальника даних, який заповнює форму, але я намагаюся уникати цього, оскільки це виглядає некрасиво, і це не так розширюється і не відповідає решті полів.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
. Вам потрібен аналогічний клас, який реалізує \Magento\Framework\Option\ArrayInterface
і має метод, який називається, toOptionArray
що повертає масив зі своїми значеннями. кожен елемент з масиву повинен виглядати так['value' => ..., 'label' => ...]