Як я можу змінити існуючий модаль у Magento 2?


36

Я намагаюся змінити поведінку Модалу (а не Моделі) в Magento 2.
Модаль, про який йде мова advanced_inventory_modal, оголошено в module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Тепер я знаю, що можу використовувати Модифікатор у пулі форм-модифікаторів продукту:

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

... і використовувати modifyMeta()-метод у моєму модифікаторі для маніпулювання конфігурацією XML, але чомусь модальний інвентар не присутній у даних, що надаються тут.Це також не sortOrderпов'язана з проблемою, оскільки я вже встановив такий шлях.sortOrderАтрибуту по, можливо , що - то робити з цим.

То що дає? Хтось може сказати мені, що є правильним способом змінити вміст існуючого модалу в Magento 2?

Редагувати:

Я знайшов рішення чи вирішення (ще не впевнений) щодо того, як досягти того, що я намагаюся досягти. Виявляється, що якщо встановити sortOrderна 10000 у мене є деякі дані в моєму modifyMeta()-a метод , який я можу використовувати:

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?

1
Це єдиний спосіб наразі налаштувати такий тип компонента Ui, як цей. Модифікатори PHP
Тоан Нгуен

2
@Giel Berkers Ваше запитання добре, але, на жаль, я не знаю, як на нього відповісти. На щастя, у мене достатньо репутації, щоб поставити щедрість на ваше запитання, щоб залучити когось, хто знає, щоб відповісти на ваше запитання. Мій рід.
Прощальний обмін стека

Відповіді:


1

Є два способи:
1. Створити нову модель (шляхом створення нового модуля в локальному пулі)
2. Переосмислити існуючу модель конкретного модуля, який потрібно.


0

Ви можете встановити <sequence>в module.xml з CatalogInventory модуля. Після цього ви можете створити product_form.xml під

app / code / Ваш / Модуль /view/adminhtml/ui_component/product_form.xml

З таким самим шляхом, як у Каталожному інвентарі . Це замінить потрібну вам конфігурацію.

Я хотів би навести будь-які приклади, але я не знаю, що вам тут потрібно. PS Вам не потрібно додавати інші елементи, які вам не потрібні, у ваш XML . вони будуть взяті з батьківської конфігурації xml

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.