Magento 2 Adminhtml поширює форми на декілька вкладок


42

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

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

Моя конкретна ситуація, яка провокує це питання, полягає в тому, що я хочу мати стандартну форму на одній вкладці (кілька текстових вводів), а на іншій вкладці, я хочу мати dynamicRowsкомпонент інтерфейсу. Ми назвали ці вкладки Основними та рядками.

В даний час я реалізую це так: Main визначається в _prepareFormметоді в його блоці, який є розширенням класу Form\Generic. Ця форма з’являється і працює добре, поки я не додаю динамічні рядки.

Мій файл компонування має код для додавання вкладки "Головне" та призначення блоку вмісту. Крім того, він має контейнер з іменем line_items, який містить форму uiComponentдля форми, що містить динамічні рядки.

Вкладка "Елементи рядка" створюється _beforeToHtmlметодом Widget\Tab, і його вміст призначається за допомогою виклику getChildHtmlна контейнері line_items.

Вкладка працює і заповнена правильною структурою, що дозволяє мені додавати та видаляти рядки.

Проблема полягає в тому, що коли я надсилаю сторінку, подаються лише введення даних на вкладці "Елементи рядків".

Тож я знаю, що я не налаштував це правильно, і мені потрібен якийсь спосіб доручити його відстежувати та подавати всі елементи форми. Більшість цієї реалізації є результатом моїх спроб змінити інженерне налаштування форми "Атрибути продукту категорії", яка схожа на те, що я хочу зробити.

Хтось має про це уявлення?


Ви коли-небудь це розуміли?
джеміль

1
Стівен - Я припускаю, що ти знайшов рішення після цього часу? Якщо так, чи можете ви, будь ласка, оновити це рішення?
brentwpeterson

@Stephen Fritz - Надайте, будь ласка, скріншот, як ви шукаєте?
Похвальний Раджпут

Чи можу я запитати, чи потрібне відповідь на це питання? Якщо це так, я можу переконатися, що я розумію проблему: чи ми намагаємося створити резервний екран із окремими формами в ньому? або екран з декількома вкладками (мода uiComponent) може бути вирішенням цієї проблеми?
Ерве Трибуйлой

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 вкладки на формі із пов’язаними полями форми.

Сподіваюся, що це рішення працює для вас

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.