मैं 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 कॉन्फ़िगरेशन में हेरफेर करने के लिए मेरे संशोधक में -method का उपयोग करें, लेकिन किसी कारण से, इन्वेंट्री मोडल यहां मौजूद डेटा में मौजूद नहीं है।यह भी एक sortOrderसंबंधित समस्या नहीं है क्योंकि मैं पहले से ही उस तरह से उच्च सेट करता हूं।sortOrder-Attribute इसके साथ कुछ करने के लिए हो सकता है।

तो क्या देता है? क्या कोई मुझे बता सकता है कि Magento 2 में मौजूदा मॉडल की सामग्री को संशोधित करने का उचित तरीका क्या है?

संपादित करें:

मुझे एक समाधान या वर्कअराउंड मिला (अभी तक निश्चित नहीं है) कि मैं कैसे हासिल करने की कोशिश कर रहा हूं। यह पता चला है कि अगर मैं 10000 पर सेट sortOrderकरता हूं तो मेरे पास मेरे -ए पद्धति में कुछ डेटा है जिसका मैं उपयोग कर सकता हूं: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
इस तरह के यूआई घटक को अनुकूलित करने के लिए यह एकमात्र तरीका है। PHP संशोधक।
तान गुयेन

2
@ Giel Berkers आपका सवाल अच्छा है लेकिन दुर्भाग्य से मुझे नहीं पता कि इसका जवाब कैसे दूं। सौभाग्य से मेरे पास आपके प्रश्न का उत्तर देने के लिए पर्याप्त प्रतिष्ठा है जो आपके प्रश्न का उत्तर देने के लिए किसी को आकर्षित करना चाहता है। मेरे प्रकार।
विदाई स्टैक एक्सचेंज

जवाबों:


1

दो तरीके हैं:
1. एक नया मॉडल बनाएं (स्थानीय पूल में नए मॉड्यूल के निर्माण के माध्यम से)
2. विशिष्ट मॉड्यूल के मौजूदा मॉडल को ओवरराइड करने के लिए जिसे आप चाहते हैं।


0

आप कैटलॉग इन्वेंट्री मॉड्यूल के मॉड्यूल.एक्सएमएल<sequence> में सेट कर सकते हैं । उसके बाद, आप के तहत product_form.xml बना सकते हैं

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

कैटलॉग इन्वेंट्री में समान पथ के साथ । यह आपके द्वारा आवश्यक कॉन्फ़िगरेशन को बदल देगा।

मैं कोई भी उदाहरण देना चाहूंगा लेकिन मुझे नहीं पता कि आपको यहां क्या चाहिए। PS आपको अपने XML में अन्य तत्वों को जोड़ने की आवश्यकता नहीं है । उन्हें मूल xml कॉन्फ़िगरेशन से लिया जाएगा ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.