Próbuję zmienić zachowanie
modalu (nie modelu) w Magento 2. Omawiany modal jest advanced_inventory_modal
zadeklarowany w module-catalog-inventory/view/adminhtml/ui_component/product_form.xml
.
Teraz wiem, że mogę używać modyfikatora w puli modyfikatorów formularzy produktu:
<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>
... i użyj modifyMeta()
-metody w moim modyfikatorze do manipulowania konfiguracją XML, ale z jakiegoś powodu mod inwentaryzacyjny nie jest obecny w danych tutaj podanych.Nie jest to również sortOrder
problem związany z tym, że już tak wysoko postawiłem.sortOrder
-Attribute może mieć coś z tym zrobić.
Co więc daje? Czy ktoś może mi powiedzieć, jaki jest właściwy sposób modyfikowania zawartości istniejącego modalu w Magento 2?
Edytować:
Znalazłem rozwiązanie lub obejście (jeszcze nie jestem pewien), jak osiągnąć to, co próbuję osiągnąć. Okazuje się, że jeśli ustawięsortOrder
na 10000, to mam w swojej modifyMeta()
metodzie jakieś dane , których mogę użyć:
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?
Odpowiedzi:
Istnieją dwa sposoby:
1. Utwórz nowy model (poprzez utworzenie nowego modułu w puli lokalnej)
2. Aby zastąpić istniejący model konkretnego modułu, który chcesz.
źródło
Można ustawić
<sequence>
w module.xml z CatalogInventory modułu. Następnie możesz utworzyć product_form.xml w obszarzeZ taką samą ścieżką jak w Katalogu . Spowoduje to zastąpienie potrzebnej konfiguracji.
Chciałbym podać jakieś przykłady, ale nie wiem, czego tu potrzebujesz. PS nie musisz dodawać innych elementów, których nie potrzebujesz w swoim XML . zostaną pobrane z nadrzędnej konfiguracji xml .
źródło