모든 페이지의 프론트 엔드에 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. my.js 파일이 존재한다고 magento에 알리려면 XML을 어딘가에 두어야합니까?

  7. app/code거기에 모든 js 코드가 있는 모듈을 만들면 모든 페이지의 모든 내용이 포함됩니까? 어떻게하면 되나요?

답변:


65

main.jsRequireJS-way의 모든 페이지에 사용자 정의 파일 을로드하려면 다음과 같이하십시오.

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"확장자는 필요하지 않습니다.

우리 requirejs-config.jsrequirejs-config.jsMagento에 정의 된 다른 것과 병합 될 것 입니다.

RequireJS는 main.js각 페이지에 파일을로드하여 종속성을 해결하고 비동기 방식으로 파일을로드합니다.


선택 사항 : 타사 라이브러리 포함

타사 라이브러리를 포함시키는 방법입니다.

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($) {

  // ...

});

안녕하십니까, 여기에 bootstrap.js를 포함시켜야하는지 알 수 있습니까? 부트 스트랩이 테마에서 잘 작동하도록 추가하려면 어떻게해야합니까? 감사!
anujeet

1
@anujeet 위 예제에 bootstrap.js포함 slick.js된 것과 같은 방식으로 포함시킬 수 있습니다 . 심 값이 사용하려고 할 수 있습니다 'bootstrap': { deps: ["jquery"], exports: '$.fn.popover' }, 여기에 설명 된대로 : stackoverflow.com/a/13556882/3763649
안드레아

내 필요한-config.js 참조 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!']); 내 minicart이 작업 중지
anujeet

@anujeet require-config.js를보고 자바 스크립트 콘솔에 오류가있는 경우이 문제로 다른 질문을 여는 것이 좋습니다. 귀하의 질문을 여기에 연결하면 기꺼이 도와 드리겠습니다 :)
Andrea

더 많은 js를 포함하면 오류 "js / ScrollMagic.min", "js / debug.addIndicators.min"
yavonz15

6

아래와 같이 xml을 사용하여 JS 파일을 추가 할 수 있습니다. 모든 페이지에 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

파일을 복제하십시오.

app / code / Magento / Theme / view / frontend / layout / default_head_blocks.xml

app / code / 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에서 프론트 엔드 devdocs 공식을 읽어 기본을 얻습니다. :)


Bootstrap의 스크립트는 JQuery를 초기화해야하며 헤드를 포함하여 JQuery가 작동하지 않습니다. 공식 문서를 읽으십시오 . 더 많은 정보를 위해서. :)
VS

2

default_head_blocks.xml파일을 사용하여 js를 추가하는 방법은 타사 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) @Goldy가 제안한 방법을 사용하여 js를 추가하십시오. 모든 페이지에 js 파일을 추가합니다.

자세한 내용은이 게시물을 볼 수 있습니다

도움이 되었기를 바랍니다.


1

이것이 내 magento2 사용자 정의 테마에 dotdotdot 라이브러리를 추가하는 방법입니다.

1. 경로에 따라 테마에서 Js 라이브러리를 다운로드하여 추가하십시오.

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

2. 다음과 같이 테마의 requirejs 파일을 작성하고 requirejs에 새로 추가 된 라이브러리를 알리십시오.

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

3. 테마의 기본 js 파일에 추가 된 라이브러리를 다음과 같이 사용하십시오.

// 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. 다음과 같이 테마의 js 파일을 사이트 헤드에 포함시킵니다.

// 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 라이브러리 및 사용자 정의 파일을 추가 할 수 있습니다.


나는 이것이 관리자 측이라고 시도했지만 js는 올바르게오고 있지만 예상 결과는 나오지 않습니다.
Naveenbos

좋은 대답입니다. 시도 해봐 js 파일이 필요한 특정 페이지를 지정하는 방법이 있습니까?
Mohammed Joraid

특정 페이지의 경우 위 예제의 "default_head_blocks.xml"컨텐츠를 특정 레이아웃 파일로 이동하십시오. 예를 들어 제품 세부 정보 페이지의 경우 app / design / frontend / Namespace / themename / Magento_Catalog / layout / catalog_product_view.xml
saiid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.