सभी पृष्ठों के लिए फ्रंट में JS फाइल कैसे जोड़ें


38

मैंने सभी परिणामों के लिए JS फ़ाइल लोड करने के बारे में Google परिणामों के 3 पृष्ठ पढ़े हैं और अभी भी ऐसा करने में सक्षम नहीं हूं।

मुझे कुछ संदेह हुआ है, आशा है कि कोई उन्हें बाहर निकाल सकता है।

  1. मैं एक मॉड्यूल के अंदर बनाने की जरूरत है app/codeसाथ requirejs-config.js? या मैं requirejs-config.jsइसके बजाय अपने विषय के अंदर रख सकता हूं?

  2. मुझे अंदर क्या डालना चाहिए requirejs-config.js?

  3. मेरी .jsफ़ाइल के अंदर कोड कैसा दिखना चाहिए ? मैंने देखा कि आप jQuery का उपयोग नहीं कर सकते हैं document.readyऔर आपके पास होना चाहिएdefine([

  4. मुझे अंदर क्या डालना चाहिए define([?

  5. अगर मुझे थर्ड पार्टी jQuery मॉड्यूल मिला है, तो क्या मुझे उन्हें काम करने के लिए संपादित करना होगा?

  6. क्या मुझे Magento को यह बताने के लिए कहीं xml डालना होगा कि my.js फ़ाइल मौजूद है?

  7. अगर मैं app/codeवहां सभी js कोड के साथ एक मॉड्यूल बनाता हूं , तो क्या यह सभी पृष्ठों में सभी सामान शामिल करेगा? मैं उसे कैसे प्राप्त कर सकता हूं?

जवाबों:


65

main.jsसभी पृष्ठों पर एक फ़ाइल को लोड करने के लिए (आवश्यकताएँ में) यह एक अच्छा तरीका है:

1) बनाएं main.js

main.jsथीम फ़ोल्डर के भीतर बनाएँ

<theme_dir>/web/js/main.js

इस सामग्री के साथ:

define([
  "jquery"
], 
function($) {
  "use strict";

  // Here your custom code...
  console.log('Hola');

});

संक्षेप में : हम शुरुआत में निर्भरता की घोषणा करते हैं, जैसे "jquery"। हम फ़ंक्शन के पैरामीटर को फ़ंक्शन के भीतर निर्भरता का उपयोग करने के लिए चर नाम के रूप में परिभाषित करते हैं, जैसे "jquery" --> $। हमने अपना सभी कस्टम कोड भीतर रखा है function($) { ... }

2) main.jsएक requirejs-config.jsफाइल के साथ घोषणा

requirejs-config.jsविषय फ़ोल्डर के भीतर एक फ़ाइल बनाएँ :

<theme_dir>/requirejs-config.js

इस सामग्री के साथ:

var config = {

  // When load 'requirejs' always load the following files also
  deps: [
    "js/main"
  ]

};

"js/main"हमारे रिवाज का रास्ता है main.js। ".Js" एक्सटेंशन की आवश्यकता नहीं है।

हमारे Magento में परिभाषित requirejs-config.jsअन्य के साथ विलय कर दिया जाएगा requirejs-config.js

आवश्यकताएं हमारी main.jsफ़ाइल को प्रत्येक पृष्ठ पर, निर्भरता को हल करने और async तरीके से फ़ाइलों को लोड करने में लोड करेंगी ।


वैकल्पिक: तीसरे पक्ष के पुस्तकालय सहित

यह तीसरे पक्ष के पुस्तकालयों को शामिल करने का तरीका है।

1) पुस्तकालय में जोड़ें web/js:

<theme_dir>/web/js/vendor/jquery/slick.min.js

2)requirejs-config.js इस सामग्री को खोलें और जोड़ें:

var config = {

  deps: [
    "js/main"
  ],

  // Paths defines associations from library name (used to include the library,
  // for example when using "define") and the library file path.
  paths: {
    'slick': 'js/vendor/jquery/slick.min',
  },

  // Shim: when you're loading your dependencies, requirejs loads them all
  // concurrently. You need to set up a shim to tell requirejs that the library
  // (e.g. a jQuery plugin) depends on another already being loaded (e.g. depends
  // on jQuery).
  // Exports: if the library is not AMD aware, you need to tell requirejs what 
  // to look for so it knows the script has loaded correctly. You can do this with an 
  // "exports" entry in your shim. The value must be a variable defined within
  // the library.
  shim: {
    'slick': {
      deps: ['jquery'],
      exports: 'jQuery.fn.slick',
    }
  }

};

यह वास्तव में यह क्या है की तुलना में अधिक जटिल लग रहा है।

3) के भीतर निर्भरता जोड़ें main.js:

define([
  'jquery',
  'slick'
], 
function($) {

  // ...

});

नमस्ते, क्या आप बता सकते हैं कि मुझे यहां बूटस्ट्रैप.जेएस शामिल करना है। मैं इसे कैसे जोड़ सकता हूं ताकि बूटस्ट्रैप मेरे विषय में अच्छा काम करे। धन्यवाद!
अनुजित

1
@anujeet आप bootstrap.jsउसी तरह से शामिल कर सकते हैं जैसे मैंने slick.jsउपरोक्त उदाहरण में शामिल किया है। शिम मूल्य के लिए आप इसका उपयोग करने का प्रयास कर सकते हैं: 'bootstrap': { deps: ["jquery"], exports: '$.fn.popover' }जैसा कि यहाँ बताया गया है: stackoverflow.com/a/13556882/3763649
एंड्रिया

मेरी आवश्यकता var config = { deps: [ "js/animate", "js/incase", "js/confetti" ], paths: { "jquery.bootstrap":"js/bootstrap.min" }, shim:{ 'jquery.bootstrap':{ 'deps':['jquery'] } } }; require(["jquery",'jquery.bootstrap', 'jquery/ui', 'jquery/validate', 'mage/validation/validation', 'domReady!']); देखें- config.js मेरा मिनीकार्ट इसके साथ काम करना बंद कर देता है
अनुज

@anujeet बेहतर है कि आप इस मुद्दे के साथ एक और प्रश्न खोलें, अपनी आवश्यकता-config.js की रिपोर्टिंग करें और यदि आपके पास जावास्क्रिप्ट कंसोल में कुछ त्रुटियां हैं। यदि आप अपने प्रश्न को यहाँ
एंड्रिया

जब अधिक js शामिल हों तो मेरे पास "js / ScrollMagic.min", "js / debug.addIndicators.min"
त्रुटियां हैं

6

आप नीचे के रूप में xml का उपयोग करके जेएस फाइलें जोड़ सकते हैं। यह सभी पृष्ठों में js जोड़ देगा।

कस्टम मॉड्यूल के साथ:

default.xmlअपने मॉड्यूल में फ़ाइल बनाएँ ।

app/code/vendor_name/module_name/view/frontend/layout/default.xml

<?xml version="1.0"?>
<page xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <head>
        <!-- Add js using link tag-->
        <link src="js/script.js"/>

        <!-- Add js-->
        <script src="Vendor_Module::js/script.js"/>

        <!-- Add external js -->
        <script src="https://apis.google.com/js/platform.js" src_type="url" />
   </head>
</page>

6

फ़ाइल को डुप्लिकेट करें:

एप्लिकेशन / कोड / Magento / विषय / देखने / दृश्यपटल / लेआउट / default_head_blocks.xml

सेवा मेरे

ऐप / कोड / your_vendor / your_theme /Magento_Theme/layout/default_head_blocks.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <!-- Add local resources -->
        <css src="css/my-styles.css"/>

        <!-- The following two ways to add local JavaScript files are equal -->
        <script src="Magento_Catalog::js/sample1.js"/>
        <link src="js/sample.js"/>

        <!-- Add external resources -->
        <css src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" src_type="url" />
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js" src_type="url" />
        <link src="http://fonts.googleapis.com/css?family=Montserrat" src_type="url" /> 
    </head>
</page>

अधिक जानकारी के लिए:

http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/xml-manage.html

सौभाग्य!

BTW ने बेसिक पाने के लिए magento के फ्रंट डिवॉडक्स अधिकारी को पढ़ा :)


क्योंकि बूटस्ट्रैप की स्क्रिप्ट को आरंभिक रूप से JQuery की आवश्यकता होती है, जिसमें यह शामिल है कि यह काम नहीं करेगा। इस आधिकारिक डॉक को पढ़ें । अधिक जानकारी के लिए। :)
VS

2

default_head_blocks.xmlफ़ाइल का उपयोग करके js जोड़ने की विधि 3rd पार्टी JQuery प्लगइन्स के लिए काम नहीं करेगी। इसलिए, यदि आप कस्टम JQuery प्लगइन्स जोड़ना और उनका उपयोग करना चाहते हैं, तो आपको requirejs-config.jsफ़ाइल का उपयोग करने की आवश्यकता होगी ।

एक-एक करके अपने सवालों के जवाब देने के लिए:

1) और 2) आपको requirejs-config.jsफ़ाइल जोड़ने के लिए एक मॉड्यूल बनाने की आवश्यकता नहीं है । आप इसे इस स्थान पर जोड़ सकते हैं:

app/design/frontend/<Vendor>/<theme>/requirejs-config.js

एक उचित फ़ाइल बनाने के लिए इस उत्तर का संदर्भ लें requirejs-config.js

3) आपको अपनी स्क्रिप्ट लिखने से पहले अपनी js फ़ाइल की निर्भरता को सूचीबद्ध करना होगा।

require([
  'jquery',
  'jquery/ui'
], function($){
   // ... Your code here
}); 

उपरोक्त कोड कहता है कि आपको अपनी स्क्रिप्ट के लिए jquery और jquery ui की आवश्यकता होगी।

4) आपको define([तब तक उपयोग करने की आवश्यकता नहीं है जब तक आप एक जावास्क्रिप्ट प्लगइन नहीं बना रहे हैं।

5) नहीं, आपको उन्हें संपादित करने की आवश्यकता नहीं है लेकिन आपको requirejs-config.jsफ़ाइल का उपयोग करके उनकी निर्भरता को निर्दिष्ट करने की आवश्यकता होगी । यदि आपके पास owl.carousel.min.jsहै <vendor>/<theme>/web/js/owl.carousel.min.js, तो आपकी requirejs-config.jsफ़ाइल इस तरह दिखाई देगी:

var config = {
    map: {
        '*': {
            owlCarouselTheme: 'js/owl.carousel.min'
        }
    },
    shim: {
        owlCarouselTheme: ['jquery']
    }
};

उपरोक्त कोड में, कृपया याद रखें कि .jsफ़ाइल के लिए कोई भी नहीं है । और अब इसे अपने js में उपयोग करना है

require(['jquery', 'owlCarouselTheme'],function($){
    $(document).ready(function() {
        $(".footer.links").addClass("owl-carousel").owlCarousel({items: 1});
    });
})

यदि सब कुछ अच्छा काम करता है, तो आपको एक स्लाइडर में अपने पाद लिंक होना चाहिए।

6) और 7) अपने js को जोड़ने के लिए @Goldy द्वारा सुझाई गई विधि का उपयोग करें। यह आपकी js फाइल को सभी पेजों में जोड़ देगा।

आगे पढ़ने के लिए, आप इस पोस्ट को देख सकते हैं

उम्मीद है की यह मदद करेगा।


1

यह है कि मैं अपने magento2 कस्टम विषय में dotdotdot पुस्तकालय कैसे जोड़ता हूं।

1. पथ के बाद अपने विषय में जेएस लाइब्रेरी को डाउनलोड करें और जोड़ें:

// app/design/frontend/Namespace/themename/web/js/jquery.dotdotdot.min.js

2. पालन के रूप में एक विषय की आवश्यकता फ़ाइल बनाएँ और आवश्यकताओं को नव जोड़ा पुस्तकालय पता है।

// app/design/frontend/Namespace/themename/requirejs-config.js
var config = {
   map: {
       '*': {
           dotdotdot: 'js/jquery.dotdotdot.min',
       }
   }
};

3. अपने विषय के मुख्य जेएस फ़ाइल में जोड़े गए पुस्तकालय का पालन करें:

// app/design/frontend/Namespace/themename/web/js/main.js
require([ 'jquery' , 'dotdotdot' , 'domReady!'],function($){
    $(window).load(function() {
        //custom js code
        /* $(".product-item-name").each(function(){
            $(this).dotdotdot(); 
        }); */
    });
});

4. और अपनी थीम के जेएस फ़ाइल को अपनी साइट के सिर में शामिल करें:

// app/design/frontend/Namespace/themename/Magento_Theme/layout/default_head_blocks.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <link src="js/main.js"/> 
    </head>
</page>

आप magento2 में हर पृष्ठ पर किसी भी बाहरी जेएस लाइब्रेरी और कस्टम फ़ाइल को जोड़ सकते हैं।


मैंने कोशिश की है कि यह एडमिन की तरफ हो, js सही ढंग से आ रहा है लेकिन अपेक्षित परिणाम नहीं आ रहा है
Naveenbos

अच्छा जवाब। यह कोशिश करो। क्या एक निश्चित पृष्ठ निर्दिष्ट करने का कोई तरीका है जहाँ js फ़ाइल की आवश्यकता है?
मोहम्मद जोरैद

किसी विशिष्ट पृष्ठ के लिए, ऊपर दिए गए उदाहरण में "default_head_blocks.xml" सामग्री को अपनी विशिष्ट लेआउट फ़ाइल में ले जाएं। उदाहरण के लिए, उत्पाद विवरण पृष्ठ के मामले में, उस xml को ऐप / डिज़ाइन / फ्रंटेंड / Namespace / themename / Magento_Catalog / लेआउट / कैटलॉग_प्रोडक्ट_व्यू। Xml
saiid
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.