Magento 2 Adminhtml Распределение форм по нескольким вкладкам

42

Я пытаюсь создать внутренний модуль, в котором на своей странице редактирования я использую admin-2column-leftмакет.

Я хочу иметь форму на каждой вкладке, но я не понимаю, как я могу это сделать.
В идеале я хотел бы знать, как назначать разные формы uiComponentsдля разных вкладок или как определить одну uiComponentформу для своей формы, но иметь возможность назначить, какой набор полей будет добавлен на какую вкладку.

Моя конкретная ситуация, которая провоцирует этот вопрос, заключается в том, что я хочу, чтобы на одной вкладке была стандартная форма (несколько вводов текста), а на другой вкладке - dynamicRowsкомпонент пользовательского интерфейса. Мы назвали эти вкладки Основные и Позиции.

В настоящее время я реализую это следующим образом: Main определяется в _prepareFormметоде внутри его блока, который является расширением класса Form\Generic. Эта форма появляется и работает нормально, пока я не добавлю динамические строки.

В моем файле макета есть код для добавления вкладки Main и назначения блока контента. Также он имеет контейнер с именем line_items, который содержит uiComponentдля формы, содержащей динамические строки.

Вкладка «Элементы строки» создается в _beforeToHtmlметоде Widget\Tab, и ее содержимое назначается с помощью вызова getChildHtmlконтейнера «line_items».

Вкладка работает и заполнена правильной структурой, что позволяет мне добавлять и удалять строки.

Проблема в том, что когда я отправляю страницу, отправляются только входные данные на вкладке "Позиции".

Так что я знаю, что не настроил это правильно, и мне нужен какой-то способ, чтобы проинструктировать его отслеживать и отправлять все элементы формы. Большая часть этой реализации основана на моих попытках перепроектировать настройку формы атрибутов продукта категории, что аналогично тому, что я хочу сделать.

У кого-нибудь есть идеи по этому поводу?

Стивен Фриц
источник
Вы когда-нибудь понимали это?
Джамил
1
Стивен - Я предполагаю, что вы нашли решение по прошествии этого времени? Если да, можете ли вы обновить это с вашим решением?
Brentwpeterson
@Stephen Fritz - Не могли бы вы предоставить скриншот, как вы ищете?
Храп Раджпут
Могу я спросить, нужен ли на этот вопрос ответ? Если это произойдет, я могу убедиться, что понимаю проблему: мы пытаемся создать внутренний экран с отдельными формами в нем? или экран с несколькими вкладками (uiComponent) может быть решением этой проблемы?
Herve Tribouilloy
1
@stephen Fritz - Пожалуйста, попробуйте изменить имя набора полей, потому что оно должно быть уникальным, оно может конфликтовать где-то еще. У меня есть тот же самый номер и его решение, изменив имя fieldset
Абдул Кадир

Ответы:

0

Используйте следующий код для создания вкладок с одной формой, используя UI-Component

<argument name="data" xsi:type="array">
    <item name="js_config" xsi:type="array">
        <item name="provider" xsi:type="string">custom_form.custom_form_data_source</item>
        <!--This is for tab -->
        <item name="deps" xsi:type="string">custom_form.custom_form_data_source</item>
    </item>

    <!--following tag add the tab into form-->
    <item name="label" xsi:type="string" translate="true">Test Details</item>
    <item name="reverseMetadataMerge" xsi:type="boolean">true</item>
   <item name="layout" xsi:type="array">
        <item name="type" xsi:type="string">tabs</item>
        <item name="navContainerName" xsi:type="string">left</item>
    </item>

</argument>

Создать элемент формы

 <fieldset name="general">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string">General Information</item>
        </item>
    </argument>

    <field name="name">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="source" xsi:type="string">general</item>
                <item name="label" xsi:type="string">Name</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="dataScope" xsi:type="string">name</item>
                <item name="validation" xsi:type="array">
                    <item name="required-entry" xsi:type="boolean">true</item>
                </item>
            </item>
        </argument>
    </field>
 </fieldset>
 <fieldset name="address">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string">Address and Contact</item>
        </item>
    </argument>
    <field name="address_line1">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="source" xsi:type="string">address</item>
                <item name="label" xsi:type="string">Address Line1</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="datatype" xsi:type="string">text</item>
                <item name="datascope" xsi:type="string">address_line1</item>
            </item>
        </argument>
    </field>

    <field name="address_line2">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="source" xsi:type="string">address</item>
                <item name="label" xsi:type="string">Address Line2</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="datatype" xsi:type="string">text</item>
                <item name="datascope" xsi:type="string">address_line2</item>
            </item>
        </argument>
    </field>
  </fieldset>

Этот код отобразит 2 вкладки в форме со связанными полями формы.

Надеюсь, что это решение работает для вас

Митро
источник