Làm cách nào để thay đổi phương thức hiện có trong Magento 2?


36

Tôi đang cố gắng thay đổi hành vi của một Modal (không phải Model) trong Magento 2.
Phương thức được đề cập là advanced_inventory_modal, được khai báo module-catalog-inventory/view/adminhtml/ui_component/product_form.xml.

Bây giờ tôi biết tôi có thể sử dụng Công cụ sửa đổi trong nhóm sản phẩm-mẫu-sửa đổi-nhóm:

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

... và sử dụng modifyMeta()-method trong công cụ sửa đổi của tôi để thao tác cấu hình XML, nhưng vì một số lý do, phương thức kiểm kê không có trong dữ liệu được cung cấp ở đây.Đó cũng không phải là sortOrdervấn đề liên quan vì tôi đã đặt mức đó lên cao.Các sortOrderthuộc tính có thể có một cái gì đó để làm với nó.

Vì vậy, những gì cho? Ai đó có thể cho tôi biết cách thích hợp để sửa đổi nội dung của một phương thức hiện có trong Magento 2 không?

Chỉnh sửa:

Tôi tìm thấy một giải pháp hoặc cách giải quyết (chưa chắc chắn) về cách đạt được những gì tôi đang cố gắng đạt được. Hóa ra nếu tôi đặt sortOrderthành 10000 tôi có một số dữ liệu trong modifyMeta()phương thức -a mà tôi có thể sử dụng:

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
Đó là cách duy nhất cho đến nay để tùy chỉnh loại thành phần Ui như thế này. Các sửa đổi PHP.
Toàn Nguyễn

2
@Giel Berkers Câu hỏi của bạn rất hay nhưng tiếc là tôi không biết trả lời nó như thế nào. May mắn thay, tôi có đủ danh tiếng để đặt tiền thưởng cho câu hỏi của bạn để thu hút một người biết trả lời câu hỏi của bạn. Loại của tôi
Chia tay Stack Trao đổi

Câu trả lời:


1

Có hai cách:
1. Tạo một mô hình mới (thông qua việc tạo mô-đun mới trong nhóm cục bộ)
2. Để ghi đè mô hình hiện có của mô-đun cụ thể mà bạn muốn.


0

Bạn có thể thiết lập <sequence>trong module.xml của mô-đun CatalogInventory . Sau đó, bạn có thể tạo sản phẩm_form.xml trong

ứng dụng / mã / Your / Module /view/adminhtml/ui_component/product_form.xml

Với cùng một đường dẫn như trong CatalogInventory . Điều này sẽ thay thế cấu hình bạn cần.

Tôi muốn cung cấp bất kỳ ví dụ nào nhưng tôi không biết bạn cần gì ở đây. PS bạn không cần thêm các yếu tố khác mà bạn không cần trong XML của mình . chúng sẽ được lấy từ cấu hình xml cha .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.