У меня есть пользовательский объект в моем magento 2 установки.
И одно из полей в этой сущности имеет тип multiselect и содержит список всех стран.
Я использую UI-компоненты для моей формы администратора.
Поскольку в select есть около 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' => ...]
Ответы:
Я работал над пользовательскими категориями, но в этом методе вы должны предоставить данные о странах через базу данных, взять идею из этого кода, и вы можете предоставить данные из Db или Static Data, расширив magento data, надеюсь, это поможет
XML-код
Код Кофига
Вывод выглядит так
источник