Ich habe eine benutzerdefinierte Entität in meiner Magento 2-Installation.
Eines der Felder in dieser Entität ist vom Typ Mehrfachauswahl und enthält die Liste aller Länder.
Ich benutze die UI-Komponenten für mein Admin-Formular.
Da die Auswahl ungefähr 200 Datensätze enthält, möchte ich kein Mehrfachauswahlfeld haben, da es nicht so einfach zu verwenden ist.
Deshalb habe ich eine dieser ausgefallenen Mehrfachauswahlmöglichkeiten erstellt, die dem Feld "Kategorien" im Abschnitt "Produktadministration hinzufügen / bearbeiten" ähnelt.
Es sieht besser aus, aber ich kann keinen Standardwert festlegen.
Hier ist meine Konfiguration (beachte das default
Konfigurationselement):
<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>
Und ich erwarte, dass die 2 Werte, die ich in das Standardfeld eingegeben habe, ausgewählt werden:
Wenn ich das Element in eine einfache Mehrfachauswahl verwandle, funktioniert es gut.
<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>
Ich habe mit diesem Format für die default
Einstellung gebunden
<item name="default" xsi:type="string">RO,MD</item>
und dieser auch:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Auch mit dem Tag select
und multiselect
innerhalb des formElements
Tags versucht .
Alle meine Versuche schlugen fehl.
Die default
Einstellung in anderen Feldern, wie hier beschrieben (Text, Auswahl, Datum, ...), funktioniert einwandfrei.
Irgendwelche Vorschläge für die Fancy Selects? Etwas, das ich verpasst habe?
Hinweis: Ich weiß, dass ich im Datenprovider einen Standardwert angeben kann, der das Formular ausfüllt, aber ich versuche dies zu vermeiden, da es hässlich aussieht und nicht so erweiterbar ist und nicht mit den übrigen Feldern übereinstimmt.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
. Sie benötigen eine ähnliche Klasse, die\Magento\Framework\Option\ArrayInterface
eine Methode mit dem Namen implementiert und hattoOptionArray
, die ein Array mit Ihren Werten zurückgibt. Jedes Element aus dem Array muss so aussehen['value' => ..., 'label' => ...]
Antworten:
Ich habe für benutzerdefinierte Kategorien gearbeitet, aber bei dieser Methode müssen Sie Länderdaten über eine Datenbank bereitstellen, eine Idee aus diesem Code übernehmen und möglicherweise Daten aus Db oder statischen Daten bereitstellen, indem Sie Magento-Daten erweitern
Der XML-Code
Der Cofig Code
Die Ausgabe sieht so aus
quelle