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-attribute가 함께 할 수있는 뭔가가있을 수 있습니다.

무엇을 제공합니까? 누구나 Magento 2에서 기존 모달의 내용을 수정하는 올바른 방법이 무엇인지 말해 줄 수 있습니까?

편집하다:

내가 달성하려는 것을 달성하는 방법에 대한 해결책이나 해결책 (아직 확실하지 않음)을 발견했습니다. 10000으로 설정 sortOrder하면 사용할 수있는 -a 메소드에 데이터 가 있습니다.modifyMeta()

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 수정 자.
Toan Nguyen

2
@Giel Berkers 귀하의 질문은 좋지만 안타깝게도 답변 방법을 모르겠습니다. 다행스럽게도 귀하의 질문에 답변을 해줄 사람을 끌어 들이기 위해 귀하의 질문에 현상금을 낼 수있는 평판이 충분합니다. 나 같은 사람들.
Farewell Stack Exchange

답변:


1

두 가지 방법이 있습니다.
1. 로컬 풀에서 새 모듈 생성을 통해 새 모델을 만듭니다.
2. 원하는 특정 모듈의 기존 모델을 재정의합니다.


0

당신은 설정할 수 <sequence>을 Module.xmlCatalogInventory의 모듈. 그런 다음 product_form.xml 을 만들 수 있습니다.

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

CatalogInventory 와 동일한 경로를 사용합니다 . 필요한 구성이 바뀝니다.

예제를 제공하고 싶지만 여기서 필요한 것이 무엇인지 모르겠습니다. 추신 : 당신은 당신의 XML에 필요없는 다른 요소를 추가 할 필요가 없습니다 . 부모 xml 구성 에서 가져옵니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.