Magento 2で既存のモーダルを変更するにはどうすればよいですか?


36

Magento 2でモーダル(モデルではない)の動作を変更しようとしています。
問題のモーダルはadvanced_inventory_modalで宣言されていmodule-catalog-inventory/view/adminhtml/ui_component/product_form.xmlます。

product-form-modifier-poolでModifierを使用できることがわかりました。

<virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
    <arguments>
        <argument name="modifiers" xsi:type="array">
            <item name="hf_quantity" xsi:type="array">
                <item name="class" xsi:type="string">Vendor\Module\Ui\DataProvider\Product\Form\Modifier\Quantity</item>
                <item name="sortOrder" xsi:type="number">100</item>
            </item>
        </argument>
    </arguments>
</virtualType>

...そしてmodifyMeta()、修飾子で-method を使用してXML構成を操作しますが、何らかの理由で、ここで提供されるデータにインベントリモーダルが存在しません。またsortOrder、私はすでにそのように高く設定しているので、関連する問題ではありません。sortOrder-attributeはそれとは何かを持っているかもしれません。

それで何が得られますか?Magento 2の既存のモーダルのコンテンツを変更する適切な方法を教えてください。

編集:

私が達成しようとしていることを達成する方法に関する解決策または回避策を見つけました(まだわかりません)。10000に設定sortOrderすると、使用可能なメソッドにデータが含まれていることがわかります。modifyMeta()

public function modifyMeta(array $meta)
{
    if ($path = $this->arrayManager->findPath('quantity_and_stock_status_qty', $meta, null, 'children')) {
        $this->arrayManager->remove(
            $path . '/children/qty/arguments/data/config/validation/validate-digits',
            $meta
        );
    }

    if ($path = $this->arrayManager->findPath('advanced_inventory_modal', $meta)) {
        $meta = $this->arrayManager->merge(
            $path . '/children/stock_data/children/qty/arguments/data/config',
            $meta,
            ['validation' => ['validate-digits' => false]]
        );
    }

    return $meta;
}

Note that the `advanced_inventory_modal` node is not yet complete, but my best guess is that the later addition of the modal merges with these settings, but doesn't override it. Could be wrong though, perhaps someone could share some more light on how this mechanism works?

1
これが、このようなUiコンポーネントの種類をカスタマイズする唯一の方法です。PHP修飾子。
トアングエン

2
@Giel Berkersあなたの質問は良いですが、残念ながら私はそれに答える方法がわかりません。幸いなことに、私はあなたの質問に報いを与え、あなたの質問に答えることを知っている人を引き付けるのに十分な評判を持っています。私の種類。
送別スタック交換

回答:


1

次の2つの方法があります
。1.新しいモデルを作成します(ローカルプールで新しいモジュールを作成します)
2.必要な特定のモジュールの既存のモデルを上書きします。


0

あなたは、設定することができます<sequence>module.xmlCatalogInventoryモジュール。その後、以下でproduct_form.xmlを作成できます

app / code / Your / Module /view/adminhtml/ui_component/product_form.xml

CatalogInventoryにあるのと同じパス。これにより、必要な構成が置き換えられます。

例を挙げたいのですが、ここで何が必要かわかりません。PSあなたはあなたのXMLに必要のない他の要素を追加する必要はありません。それらは親xml構成から取得されます。

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