Magento 2 Adminhtml che diffonde i moduli su più schede


42

Sto tentando di creare un modulo back-end, in cui nella mia pagina di modifica utilizzo il admin-2column-leftlayout.

Voglio avere un modulo in ogni scheda, ma non capisco come posso farlo.
Idealmente, vorrei sapere come assegnare un modulo uiComponentsdiverso a schede diverse o come posso definirne uno uiComponentper il mio modulo, ma essere in grado di assegnare quale set di campi va su quale scheda.

La mia situazione specifica, che provoca questa domanda, è che voglio avere un modulo standard su una scheda (più input di testo) e su un'altra scheda, voglio avere un dynamicRowscomponente UI. Abbiamo chiamato queste schede Elementi principali ed elementi pubblicitari.

Attualmente, lo sto implementando come segue: Main è definito nel _prepareFormmetodo all'interno del suo blocco, che è un'estensione di classe Form\Generic. Questo modulo viene visualizzato e funziona correttamente fino a quando non aggiungo le righe dinamiche.

Il mio file di layout ha un codice per aggiungere la scheda principale e assegnare il blocco di contenuto. Inoltre ha un contenitore chiamato line_items, che contiene un uiComponentper il modulo contenente righe dinamiche.

La scheda Elementi pubblicitari viene creata nel _beforeToHtmlmetodo di Widget\Tabe il suo contenuto viene assegnato utilizzando una chiamata a getChildHtmlsu un contenitore line_items.

La scheda funziona e viene popolata con la struttura corretta, permettendomi di aggiungere e rimuovere righe.

Il problema è che quando invio la pagina, vengono inviati solo gli input nella scheda Elementi pubblicitari.

Quindi so di non averlo impostato correttamente e ho bisogno di un modo per istruirlo per tracciare e inviare tutti gli elementi del modulo. La maggior parte di questa implementazione deriva dai miei tentativi di decodificare l'installazione del modulo Attributi prodotto categoria, che è simile a quello che voglio fare.

Qualcuno ne ha idea?


L'hai mai capito?
Jamil,

1
Stephen - Suppongo che tu abbia trovato una soluzione dopo tutto questo tempo? In tal caso, puoi aggiornarlo con la tua soluzione?
brentwpeterson

@Stephen Fritz - Potresti per favore fornire uno screenshot come stai cercando?
Praful Rajput,

Posso chiedere se questa domanda ha ancora bisogno di una risposta? In tal caso, potrei verificare di aver compreso il problema: stiamo cercando di creare una schermata di back-end con moduli separati? o uno schermo con più schede (uiComponent fashion) è una soluzione a questo problema?
Herve Tribouilloy,

1
@stephen Fritz - Prova a cambiare il nome del set di campi perché deve essere univoco, in quanto potrebbe essere in conflitto altrove. ho emesso lo stesso e risolto cambiando il nome del fieldset
Abdul Kadir il

Risposte:


0

Utilizzare il codice seguente per creare schede con un singolo modulo utilizzando 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>

Crea un elemento modulo

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

Questo codice visualizzerà 2 schede nel modulo con i campi modulo associati.

Spero che questa soluzione funzioni per te

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.