フォームを複数のタブに分散させるMagento 2 Adminhtml


42

編集ページでadmin-2column-leftレイアウトを使用するバックエンドモジュールを作成しようとしています。

各タブにフォームを作成したいのですが、どうすればできるのかわかりません。
理想的には、uiComponents異なるタブに異なるフォームを割り当てる方法、またはフォームにフォームを定義する方法を知りたいのですが、どのuiComponentフィールドセットがどのタブに配置されるのかを割り当てることができます。

この質問を引き起こす私の特定の状況は、1つのタブ(複数のテキスト入力)に標準フォームを配置し、別のタブにdynamicRowsUIコンポーネントを配置したいということです。これらのタブをメインおよびラインアイテムと呼びました。

現在、私はこれを次のように実装しています:Mainは_prepareForm、そのブロック内のメソッド(クラス拡張)で定義されていますForm\Generic。このフォームが表示され、動的行を追加するまで正常に機能します。

レイアウトファイルには、メインタブを追加してコンテンツブロックを割り当てるコードがあります。同様に、という名前のコンテナline_itemsがあります。これには、uiComponent動的行を含むフォームのが含まれています。

Line Itemsタブはの_beforeToHtmlメソッドで作成され、Widget\TabそのコンテンツはgetChildHtmlline_itemsコンテナでの呼び出しを使用して割り当てられます。

タブが機能し、正しい構造が設定されているため、行を追加および削除できます。

問題は、ページを送信すると、[明細]タブの入力のみが送信されることです。

そのため、これを正しく設定していないことを知っており、すべてのフォーム要素を追跡して送信するように指示する方法が必要です。この実装の大部分は、Category Product Attributesフォームのセットアップをリバースエンジニアリングしようとする試みから派生しています。これは、私がやりたいことと似ています。

誰もがそれについて考えていますか?


これを理解したことがありますか?
ジャミル

1
スティーブン-結局、解決策を見つけたと思いますか?もしそうなら、これをあなたのソリューションで更新してください。
-brentwpeterson

@Stephen Fritz-スクリーンショットを提供してください。
プラーフルラージプート

この質問にまだ答えが必要かどうかを尋ねてもいいですか?もしそうなら、私は問題を理解していることを確認するかもしれません:私たちはその中に別々のフォームを持つバックエンド画面を構築しようとしていますか?または、複数のタブを持つ画面(uiComponentファッション)がこの問題の解決策ですか?
エルベトリブイヨイ

1
@stephen Fritz-フィールドセット名は他の場所で競合している可能性があるため、一意である必要があるため、フィールドセット名を変更してください。私はフィールドセットの名前変更することにより、同じ発行し、その解決している
アブドゥル・カディル

回答:


0

次のコードを使用して、UIコンポーネントを使用して単一のフォームでタブを作成します

<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つのタブをフォームに表示します。

このソリューションがあなたに役立つことを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.