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 Das sortOrder
Problem, da ich es bereits sehr hoch angesetzt habe.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 sortOrder
auf 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?
Antworten:
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.
quelle
Sie können
<sequence>
in der Datei module.xml des CatalogInventory- Moduls festlegen . Danach können Sie unter product_form.xml erstellenMit 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 .
quelle