magento 2のインストールにカスタムエンティティがあります。
また、このエンティティのフィールドの1つはmultiselectタイプで、すべての国のリストが含まれています。
管理フォームにUIコンポーネントを使用しています。
選択には約200のレコードがあるので、複数選択フィールドは使いにくいため、複数選択フィールドは使いたくありません。
そのため、製品管理の追加/編集セクションのカテゴリフィールドに似た派手な複数選択の1つを作成しました。
見た目は良くなっていますが、デフォルト値を設定できません。
ここに私の設定があります(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' => ...]