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.