Magento 2 Adminhtml formları çoklu sekmeler arasında yaymak


43

Bir arka uç modülü oluşturmaya çalışıyorum, burada düzenleme sayfamda admin-2column-leftdüzeni kullanıyorum.

Her sekmede bir form olmasını istiyorum, ancak bunu nasıl yapabileceğimi anlamıyorum.
İdeal olarak, uiComponentsfarklı sekmelere nasıl farklı formlar atayabileceğimi veya formum uiComponentiçin nasıl bir form tanımlayabileceğimi bilmek isterim, ancak hangi alan kümesinde hangi sekmeye devam edeceğini atayabilirim.

Bu soruyu kışkırtan özel durumum, bir sekmede (çoklu metin girişleri) standart bir formda olmak istediğim ve başka bir sekmede de bir dynamicRowsUI bileşenine sahip olmak istiyorum . Bu sekmeleri Ana ve Satır Öğeleri olarak adlandırdık.

Şu anda, bunu şu şekilde uyguluyorum: Ana _prepareForm, bir sınıf uzantısı olan kendi bloğundaki yöntemde tanımlanmıştır Form\Generic. Bu form görünür ve dinamik satır ekleyene kadar düzgün çalışır.

Düzen dosyamda Ana sekmesini eklemek ve içerik bloğu atamak için kod var. Ayrıca dinamik sıra içeren form için for line_itemsiçeren bir kabı vardır uiComponent.

Satır Öğeleri sekmesi, _beforeToHtmlyönteminde oluşturulur Widget\Tabve içeriği getChildHtmlbir line_items kabına yapılan bir çağrı kullanılarak atanır .

Sekme çalışır ve doğru yapıya yerleştirilir, bu da satırları ekleyip çıkarmamı sağlar.

Sorun şu ki sayfayı gönderdiğimde, sadece Satır Öğeleri sekmesindeki girdilerin sunulması.

Bu yüzden bunu doğru bir şekilde kurmadığımı ve tüm form öğelerini izlemesi ve göndermesi için talimat vermek için bir yola ihtiyacım olduğunu biliyorum. Bu uygulamanın çoğu, yapmak istediklerime benzer olan Kategori Ürün Özellikleri formunun kurulumunu tersine çevirme girişimlerimden kaynaklanmaktadır.

Bunun hakkında bir fikri olan var mı?


Bunu daha önce hiç gördün mü?
jamil

1
Stephen - Bunca zaman sonra bir çözüm bulduğunu farz ediyorum? Eğer öyleyse, lütfen bunu çözümünüzle güncelleyebilir misiniz?
brentwpeterson

@Stephen Fritz - Lütfen nasıl bir ekran görüntüsü sağlayabilir misiniz?
Praful Rajput

Bu sorunun hala bir cevaba ihtiyacı olup olmadığını sorabilir miyim? Varsa, sorunu anladığımı doğrulayabilirim: İçinde ayrı formlar bulunan bir arka uç ekranı oluşturmaya mı çalışıyoruz? veya birden fazla sekme (uiComponent fashion) içeren bir ekran bu soruna bir çözüm olabilir mi?
Herve Tribouilloy

1
@stephen Fritz - Lütfen alan adı adını değiştirmeye çalışın, çünkü benzersiz olması gerekir, aksi halde çakışması olabilir. Ben aynı yayınladı ve onun alan ismini değiştirerek çözmek
Abdul Kadir

Yanıtlar:


0

UI Bileşeni'ni kullanarak tek bir formla sekmeler oluşturmak için aşağıdaki kodu kullanın

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

Form öğesi oluşturma

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

Bu kod, ilişkili form alanlarıyla birlikte formda 2 sekme görüntüler.

Umarım bu çözüm sizin için çalışır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.