Bagaimana saya bisa mengubah modal yang ada di Magento 2?

36

Saya mencoba mengubah perilaku Modal (bukan Model) di Magento 2. Modal yang
dimaksud adalah advanced_inventory_modal, dinyatakan dalam module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Sekarang saya tahu saya bisa menggunakan Pengubah dalam kumpulan produk-bentuk-pengubah:

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

... dan gunakan modifyMeta()-metode dalam modifier saya untuk memanipulasi konfigurasi XML, tetapi untuk beberapa alasan, modal inventaris tidak ada dalam data yang disediakan di sini.Ini juga bukan sortOrdermasalah yang terkait karena saya sudah menetapkan itu tinggi.The sortOrder-attribute mungkin ada hubungannya dengan itu.

Jadi apa yang menyebabkannya? Adakah yang bisa memberi tahu saya apa cara yang tepat untuk mengubah konten modal yang ada di Magento 2?

Edit:

Saya menemukan solusi atau solusi (belum yakin) tentang cara mencapai apa yang ingin saya capai. Ternyata jika saya atur sortOrderke 10000 saya memiliki beberapa data dalam modifyMeta()metode-saya yang dapat saya gunakan:

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
sumber
1
Itulah satu-satunya cara sejauh ini untuk menyesuaikan jenis komponen Ui seperti ini. Pengubah PHP.
Toan Nguyen
2
@Giel Berkers Pertanyaan Anda bagus tapi sayangnya saya tidak tahu bagaimana menjawabnya. Untungnya saya memiliki cukup reputasi untuk memberi hadiah pada pertanyaan Anda untuk menarik seseorang yang tahu untuk menjawab pertanyaan Anda. Jenis saya.
Perpisahan Bursa Stack

Jawaban:

1

Ada dua cara:
1. Buat model baru (melalui pembuatan modul baru di kumpulan lokal)
2. Untuk mengganti model yang ada dari modul tertentu yang Anda inginkan.

Naresh Prajapati
sumber
0

Anda dapat mengatur <sequence>di module.xml dari CatalogInventory modul. Setelah itu, Anda dapat membuat product_form.xml di bawah

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

Dengan jalur yang sama seperti di katalog katalog . Ini akan menggantikan konfigurasi yang Anda butuhkan.

Saya ingin memberikan contoh tetapi saya tidak tahu apa yang Anda butuhkan di sini. NB Anda tidak perlu menambahkan elemen lain yang tidak Anda butuhkan dalam XML Anda . mereka akan diambil dari konfigurasi xml induk .

AleksLi
sumber