Wie kann ich ein vorhandenes Modal in Magento 2 ändern?

36

Ich versuche, das Verhalten eines Modals (nicht eines Modells) in Magento 2 zu ändern.
Das fragliche Modal ist advanced_inventory_modal, deklariert in module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Jetzt weiß ich, dass ich einen Modifikator im Produkt-Formular-Modifikator-Pool verwenden kann:

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

... und verwenden Sie die modifyMeta()-Methode in meinem Modifikator, um die XML-Konfiguration zu bearbeiten. Aus irgendeinem Grund ist das Inventar-Modal in den hier bereitgestellten Daten jedoch nicht vorhanden.Es ist auch kein sortOrderProblem, da ich es bereits sehr hoch angesetzt habe.Das sortOrder-Attribut könnte etwas damit zu tun haben.

Also was gibt es? Kann mir jemand sagen, wie der Inhalt eines vorhandenen Modals in Magento 2 richtig geändert werden kann?

Bearbeiten:

Ich habe eine Lösung oder Problemumgehung gefunden (noch nicht sicher), wie das erreicht werden kann, was ich erreichen möchte. Wenn ich sortOrderauf 10000 setze , habe ich einige Daten in meiner modifyMeta()-a-Methode, die ich verwenden kann:

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
quelle
1
Dies ist die einzige Möglichkeit, eine UI-Komponente wie diese anzupassen. Die PHP-Modifikatoren.
Toan Nguyen
2
@Giel Berkers Deine Frage ist gut, aber leider weiß ich nicht, wie ich sie beantworten soll. Zum Glück habe ich genug Ruf, um Ihre Frage mit einem Kopfgeld zu belohnen und jemanden anzulocken, der weiß, wie man Ihre Frage beantwortet. Meine Art.
Farewell Stack Exchange

Antworten:

1

Es gibt zwei Möglichkeiten:
1. Erstellen Sie ein neues Modell (durch Erstellen eines neuen Moduls im lokalen Pool).
2. Überschreiben Sie das vorhandene Modell des gewünschten Moduls.

Naresh Prajapati
quelle
0

Sie können <sequence>in der Datei module.xml des CatalogInventory- Moduls festlegen . Danach können Sie unter product_form.xml erstellen

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

Mit demselben Pfad wie im CatalogInventory . Dadurch wird die von Ihnen benötigte Konfiguration ersetzt.

Ich würde gerne Beispiele nennen, aber ich weiß nicht, was Sie hier brauchen. PS Sie müssen keine anderen Elemente hinzufügen, die Sie in Ihrem XML nicht benötigen . Sie werden aus der übergeordneten XML- Konfiguration entnommen .

AleksLi
quelle