Mam niestandardową jednostkę w mojej instalacji Magento 2.
Jedno z pól tego podmiotu jest typu wielokrotnego wyboru i zawiera listę wszystkich krajów.
Używam komponentów interfejsu użytkownika do formularza administratora.
Ponieważ w zaznaczeniu znajduje się około 200 rekordów, nie chcę mieć pola wielokrotnego wyboru, ponieważ nie jest to takie łatwe w użyciu.
Więc stworzyłem jeden z tych fantazyjnych multiselects podobnych do pola kategorii w sekcji administracyjnej dodawania / edycji produktu.
Wygląda ładniej, ale nie mogę ustawić dla niego wartości domyślnej.
Oto moja konfiguracja (zauważ default
element konfiguracji):
<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>
Oczekuję, że zostaną wybrane 2 wartości, które umieściłem w polu domyślnym:
Jeśli zmienię element w prosty multiselektor, zadziała to dobrze.
<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>
Przywiązałem ten format do default
ustawienia
<item name="default" xsi:type="string">RO,MD</item>
a ten również:
<item name="default" xsi:type="array">
<item name="MD" xsi:type="string">MD</item>
<item name="RO" xsi:type="string">RO</item>
</item>
Próbowałem także z tagiem select
i multiselect
wewnątrz formElements
tagu.
Wszystkie moje próby zakończyły się niepowodzeniem.
Korzystanie z default
ustawienia w innych typach pól, zgodnie z instrukcją (tekst, zaznacz, data, ...) działa dobrze.
Wszelkie sugestie dotyczące fantazyjnych wyborów? Czegoś mi brakowało?
Uwaga: Wiem, że mogę podać wartość domyślną w dostawcy danych, który wypełnia formularz, ale staram się tego uniknąć, ponieważ wygląda brzydko i nie jest tak rozszerzalny ani niezgodny z resztą pól.
<options class="Magento\Config\Model\Config\Source\Locale\Country"/>
. Potrzebujesz podobnej klasy, która implementuje\Magento\Framework\Option\ArrayInterface
i ma metodę o nazwie,toOptionArray
która zwraca tablicę z twoimi wartościami. każdy element z tablicy musi wyglądać tak['value' => ..., 'label' => ...]
Odpowiedzi:
Pracowałem dla niestandardowych kategorii, ale w tej metodzie musisz podać dane krajów za pośrednictwem bazy danych, zacznij od tego kodu i możesz dostarczyć dane z Db lub danych statycznych poprzez rozszerzenie danych magento. Mam nadzieję, że może to pomóc
Kod xml
Kod Cofig
Dane wyjściowe wyglądają tak
źródło