Magento 2 Adminhtml verteilt Formulare auf mehrere Tabs

43

Ich versuche ein Backend-Modul zu erstellen, wobei ich auf meiner Bearbeitungsseite das admin-2column-leftLayout verwende.

Ich möchte auf jeder Registerkarte ein Formular haben, verstehe aber nicht, wie ich das machen kann.
Idealerweise würde ich gerne wissen uiComponents, wie ich verschiedenen Registerkarten unterschiedliche Formulare zuweisen oder wie ich eines uiComponentfür mein Formular definieren kann , aber in der Lage sein, zuzuweisen, welcher Feldsatz auf welche Registerkarte passt.

Meine spezielle Situation, die diese Frage aufwirft, besteht darin, dass ich ein Standardformular auf einer Registerkarte (mehrere Texteingaben) und auf einer anderen Registerkarte eine dynamicRowsUI-Komponente haben möchte . Wir haben diese Registerkarten Haupt- und Werbebuchungen genannt.

Derzeit implementiere ich dies wie folgt: Main ist in der _prepareFormMethode in ihrem Block definiert, der eine Klassenerweiterung ist Form\Generic. Dieses Formular wird angezeigt und funktioniert einwandfrei, bis ich die dynamischen Zeilen hinzufüge.

Meine Layoutdatei enthält Code zum Hinzufügen der Registerkarte "Main" und zum Zuweisen eines Inhaltsblocks. Außerdem gibt es einen Container mit dem Namen line_itemsa uiComponentfür das Formular, das dynamische Zeilen enthält.

Die Registerkarte Werbebuchungen wird in der _beforeToHtmlMethode von erstellt Widget\Tab, und ihr Inhalt wird mithilfe eines Aufrufs für getChildHtmleinen Container line_items zugewiesen.

Die Registerkarte funktioniert und ist mit der richtigen Struktur gefüllt, sodass ich Zeilen hinzufügen und entfernen kann.

Das Problem ist, dass beim Senden der Seite nur die Eingaben auf der Registerkarte Werbebuchungen gesendet werden.

Ich weiß also, dass ich das nicht richtig eingerichtet habe, und brauche eine Möglichkeit, es anzuweisen, alle Formularelemente zu verfolgen und zu übermitteln. Der größte Teil dieser Implementierung ist auf meine Versuche zurückzuführen, das Setup des Formulars "Kategorie-Produktattribute" zurückzuentwickeln, ähnlich dem, was ich tun möchte.

Hat jemand eine Ahnung davon?

Stephen Fritz
quelle
Hast du das jemals herausgefunden?
Jamil
1
Stephen - Ich gehe davon aus, dass Sie nach all der Zeit eine Lösung gefunden haben? Wenn ja, können Sie dies bitte mit Ihrer Lösung aktualisieren?
Brentwpeterson
@Stephen Fritz - Könnten Sie bitte einen Screenshot zur Verfügung stellen, wie suchen Sie?
Praful Rajput
Darf ich fragen, ob diese Frage noch beantwortet werden muss? In diesem Fall kann ich überprüfen, ob ich das Problem verstehe: Versuchen wir, einen Backend-Bildschirm mit separaten Formularen zu erstellen? oder ist ein Bildschirm mit mehreren Registerkarten (uiComponent-Mode) eine Lösung für dieses Problem?
Herve Tribouilloy
1
@stephen Fritz - Bitte versuchen Sie, den Fieldset-Namen zu ändern, da er eindeutig sein muss und möglicherweise an anderer Stelle in Konflikt steht. Ich habe dasselbe ausgestellt und es wird gelöst, indem ich den Namen des Feldsets ändere
Abdul Kadir

Antworten:

0

Verwenden Sie den folgenden Code, um Registerkarten mit einem einzelnen Formular mithilfe von UI-Component zu erstellen

<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>

Erstellen Sie ein Formularelement

 <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>

Dieser Code zeigt 2 Registerkarten im Formular mit den zugehörigen Formularfeldern an.

Hoffe, diese Lösung funktioniert für Sie

Mitro
quelle