Как я могу изменить существующий модал в Magento 2?

36

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

Теперь я знаю, что могу использовать модификатор в product-form-modifier-pool:

<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()-method в моем модификаторе для манипулирования конфигурацией 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 / Your / Module /view/adminhtml/ui_component/product_form.xml

С тем же путем, что и в CatalogInventory . Это заменит необходимую вам конфигурацию.

Я хотел бы привести любые примеры, но я не знаю, что вам нужно здесь. PS вам не нужно добавлять другие элементы, которые вам не нужны в вашем XML . они будут взяты из родительской конфигурации xml .

AleksLi
источник