Comment changer un modal existant dans Magento 2?

36

J'essaie de changer le comportement d'un modal (pas d'un modèle) dans Magento 2.
Le modal en question est advanced_inventory_modal, déclaré dans module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Maintenant, je sais que je peux utiliser un modificateur dans le groupe product-form-modificateur-pool:

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

... et utilisez la modifyMeta()méthode -method de mon modificateur pour manipuler la configuration XML, mais pour une raison quelconque, le modal d'inventaire n'est pas présent dans les données fournies ici.Ce n’est pas non plus un sortOrderproblème lié au fait que j’ai déjà fixé ce niveau élevé.L' sortOrderattribut pourrait avoir quelque chose à voir avec cela.

Alors qu'est-ce qui donne? Quelqu'un peut-il me dire quelle est la bonne façon de modifier le contenu d'un modal existant dans Magento 2?

Modifier:

J'ai trouvé une solution ou une solution de contournement (pas encore sûr) sur la façon d'atteindre ce que j'essaie de réaliser. Il se trouve que si je mets sortOrderà 10000, il y a des données dans ma modifyMeta()méthode -a que je peux utiliser:

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?
Giel Berkers
la source
1
C’est le seul moyen jusqu’à présent de personnaliser ce type de composant Ui. Les modificateurs PHP.
Toan Nguyen
2
@Giel Berkers Votre question est bonne mais, malheureusement, je ne sais pas comment y répondre. Heureusement, j'ai suffisamment de réputation pour placer une prime sur votre question afin d'attirer quelqu'un qui sait répondre à votre question. Mon genre.
Farewell Stack Exchange

Réponses:

1

Il existe deux méthodes:
1. Créez un nouveau modèle (par la création d'un nouveau module dans le pool local).
2. Pour remplacer le modèle existant du module spécifique souhaité.

Naresh Prajapati
la source
0

Vous pouvez définir <sequence>dans module.xml du module CatalogInventory . Après cela, vous pouvez créer product_form.xml sous

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

Avec le même chemin que dans CatalogInventory . Cela remplacera la configuration dont vous aviez besoin.

Je voudrais donner des exemples, mais je ne sais pas ce dont vous avez besoin ici. PS vous n'avez pas besoin d'ajouter d'autres éléments dont vous n'avez pas besoin dans votre XML . ils seront pris de la configuration parent XML .

AleksLi
la source