Jak mogę zmienić istniejący modal w Magento 2?

36

Próbuję zmienić zachowanie
modalu (nie modelu) w Magento 2. Omawiany modal jest advanced_inventory_modalzadeklarowany 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ż sortOrderproblem 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?
Giel Berkers
źródło
1
To jedyny jak dotąd sposób dostosowania rodzaju elementu interfejsu użytkownika w ten sposób. Modyfikatory PHP.
Toan Nguyen,
2
@Giel Berkers Twoje pytanie jest dobre, ale niestety nie wiem, jak na nie odpowiedzieć. Na szczęście mam wystarczającą reputację, aby przyznać nagrodę za twoje pytanie, aby przyciągnąć kogoś, kto wie, jak odpowiedzieć na twoje pytanie. Mój rodzaj.
Wymiana

Odpowiedzi:

1

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.

Naresh Prajapati
źródło
0

Można ustawić <sequence>w module.xml z CatalogInventory modułu. Następnie możesz utworzyć product_form.xml w obszarze

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

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

AleksLi
źródło