Magento 2 में जेएस का विस्तार / ओवरराइडिंग


34

जैसा कि Magento2 लिपियों को लोड करने के लिए आवश्यकताएँ का उपयोग कर रहा है, और कोई और अधिक त्वचा फ़ोल्डर नहीं है, मैं एक समस्या के साथ फंस गया हूं:

मैं अपने संशोधित संस्करण द्वारा Magento के मॉड्यूल JS फ़ाइल को कैसे बदल सकता हूं?

उदाहरण के लिए - opc-checkout-method.js जो Magento_Checkout एक्सटेंशन से संबंधित है। यह जहाँ तक मैं देख सकता हूँ, यहjjj-config.js फ़ाइल में परिभाषित नहीं है।

मेरा एक्सटेंशन Magento_Checkout के बाद लोड किया गया है , इसलिए इसके रिवाज-config.js डेटा परिणामी आवश्यकता-कॉन्गस फ़ाइल के अंत में जोड़ा गया है।

या मुझे पूरी स्क्रिप्ट की जगह बिना किसी अन्य तरीके से करना चाहिए?


1
मुझे लगता है कि आपको फ़ाइल द्वारा लोड किए गए ऑब्जेक्ट पर फ़ंक्शन (एस) को बदलने के लिए फ़ाइल की जगह इतनी नहीं होनी चाहिए।
पीटर ओ'कालाघन

जवाबों:


93

कोई और अधिक त्वचा फ़ोल्डर नहीं है, लेकिन आप अभी भी थीम का उपयोग कर सकते हैं।

अवधारणा के प्रमाण के रूप में मैंने आपके साथ op-checkout-method.jsऔर इस का उपयोग किया ।

पूर्व शर्त:

  • Magento2-Beta11 स्थापित
  • डिफ़ॉल्ट विषय सक्रिय (रिक्त)।
  • pub/staticफ़ोल्डर में उत्पन्न कोई फ़ाइल नहीं (पब / स्टेटिक / फ्रंटेंड फ़ोल्डर को हटा दें)

क्रियाएँ:

  • op-checkout-method.jsयह app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.jsरिक्त स्थान के लिए मॉड्यूल स्थान से फ़ाइल को नकल किया हैapp/design/frontend/Magento/blank/Magento_Checkout/web/js/opc-checkout-method.js
  • क्लोन फ़ाइल संपादित और एक जोड़ा console.log('something')या alert('something')में _createके समारोह mage.opcCheckoutMethodविजेट।
  • ब्राउज़र कैश साफ़ किया गया।

परिणाम:

  • जब चेकआउट पृष्ठ लोड होता है तो मुझे मेरा अलर्ट प्रदर्शित होता है या कंसोल में पाठ लॉग होता है।

संबंधित जानकारी:

अगर मैं cli php dev/tools/Magento/Tools/View/deploy.php(स्थिर संसाधनों को प्रकाशित करने वाली स्क्रिप्ट) से चलाता हूं, तो मेरी नई js फ़ाइल अंदर डाल दी जाती हैpub/static/frontend/Magento/blank/en_US/Magento_Checkout/js/opc-checkout-method.js

[संपादित करें]

मुझे एक मॉड्यूल के माध्यम से इसे करने का एक तरीका मिला।

इसे [Namespace]/[Module]/view/frontend/requirejs-config.jsजोड़ें:

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/opc-checkout-method':'[Namespace]_[Module]/js/opc-checkout-method'
        }
    }
};

फिर [Namespace]/[Module]/view/frontend/web/js/opc-checkout-method.jsअपनी सामग्री के साथ फाइल बनाएं ।

परीक्षण के प्रयोजनों के लिए मैंने मूल फ़ाइल को क्लोन किया और बस फिर console.logसे _createफ़ंक्शन में जोड़ा गया ।

दृश्यपटल के लिए सार्वजनिक संसाधनों को पुनर्जीवित करना भी याद रखें।


धन्यवाद, Marius! क्या विस्तार के अंदर समान चीजें करना संभव है?
दिमित्री

मुझे नहीं लगता कि आप एक विस्तार से ऐसा कर सकते हैं। जब तक आप चेकआउट टेम्प्लेट को पूरी तरह से नहीं बदल लेते तब तक मैगनेटो 1 में यह संभव नहीं था। लेकिन मैं इसे करने के लिए एक रास्ता तलाश करूंगा।
मेरियस

धन्यवाद फिर से, मारियस। मैं अनुकूलित चेकआउट को लागू करने की कोशिश कर रहा हूं, जो डिफ़ॉल्ट रूप से ओवरराइड करता है, और मैं जेएस ओवरराइड के साथ फंस गया हूं।
दिमित्री

1
@DmitryR। उत्तर के लिए मेरा अपडेट देखें।
मेरियस

आवश्यकताएँ के लिए जगह-config.js अब वेंडर / मॉड्यूल / दृश्य / दृश्य / सामने / आवश्यकता-config.js है
यूजेन

11

यहां डिफ़ॉल्ट जेएस घटकों को बढ़ाने / बदलने के बारे में आधिकारिक दस्तावेज है: http://devdocs.magento.com/guides/v2.0/javascript-dev-guide/javascript/custom_js.html

प्रतिक्रिया का स्वागत है!


3
MagentoSE में आपका स्वागत है। यह उत्तर भविष्य के उपयोगकर्ताओं के लिए अधिक उपयोगी होगा यदि आपने केवल लिंक के बजाय यहाँ उत्तर जोड़ा है। यदि भविष्य में लिंक टूट जाता है, तो खोजकर्ता को आपके द्वारा संदर्भित जानकारी नहीं मिलेगी।
अरेबिका

2
यह एक उचित बिंदु है लेकिन हम 301 रीडायरेक्ट जोड़ते हैं जब विषय चलते हैं तो 404 का जोखिम कम से कम हो जाता है।
स्टीव जॉनसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.