2

I want to add a field like Street address in my custom module. same as customer Address Add from back-end form. it will look like below image. enter image description here

How can I add this kind of field using the UI component?


UPDATE:

I have used the below code to display a multiline component. But it is not displaying a filed label.

<field name="address">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="component" xsi:type="string" translate="true">Magento_Ui/js/form/components/group</item>
                    <item name="dataType" xsi:type="string">text</item>
                    <item name="size" xsi:type="number">2</item>
                    <item name="formElement" xsi:type="string">multiline</item>
                    <item name="visible" xsi:type="boolean">true</item>
                    <item name="source" xsi:type="string">store</item>
                    <item name="validation" xsi:type="array">
                        <item name="required-entry" xsi:type="boolean">true</item>
                    </item>
                </item>
                <item name="label" xsi:type="string" translate="true">Street</item>
            </argument>
        </field>

And also I would like to create a field using a new UI-component form method, the above code is an older method.

Any help would be appreciated!

12
  • Fields & label both are not displaying or just label not displaying? Aug 26, 2019 at 7:04
  • Field display but, only label not displaying. Aug 26, 2019 at 7:07
  • I found that it is default magento bug github.com/magento/magento2/issues/7428 Aug 26, 2019 at 7:20
  • Now need to know how to implement a patch of this issue. Aug 26, 2019 at 7:21
  • 1
    I will try and let you know. Thanks. +1 for the help :) Aug 26, 2019 at 10:53

1 Answer 1

2

About multiline fields data, it's render from vendor/magento/module-ui/Component/Form/Element/Multiline.php file.

It seems like there are no label fields added before prepare data. So, you need to override the file or use plugin for that.

For testing, you can write code in core file and add this below code :

vendor/magento/module-ui/Component/Form/Element/Multiline.php

public function prepare() {
    $size = abs((int) $this->getData('config/size'));
    $validation = [$this->getData('config/validation')];
    while ($size--) {
        $identifier = $this->getName() . '_' . $size;
        $arguments = [
            'data' => [
                'name' => $identifier,
                'config' => [
                    'dataScope' => $size,
                    'dataType' => static::DATA_TYPE,
                    'formElement' => static::FORM_ELEMENT,
                    'sortOrder' => $size,
                ],
            ],
        ];

        if (!empty($validation[$size])) {
            $arguments['data']['config']['validation'] = $validation[$size];
        }
        // For display label
        if($this->getData('config/formElement') == 'multiline' && $this->getData('config/label') != ''){
            $arguments['data']['config']['label'] = $this->getData('config/label');
        }
        $component = $this->uiComponentFactory->create($identifier, Field::NAME, $arguments);
        $component->prepare();

        $this->components[$identifier] = $component;
    }
    parent::prepare();
}

Note : I do not recommended to change in core files. Create plugins for that.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.