すべてのページのフロントエンドにJSファイルを追加する方法


38

すべてのページのJSファイルを読み込む方法について、Googleの結果の3ページを読みましたが、まだ実行できません。

いくつか疑問がありますが、誰かがそれらをクリアできることを願っています。

  1. 内部app/codeでモジュールを作成する必要がありますrequirejs-config.jsか?またはrequirejs-config.js、代わりにテーマを内部に配置できますか?

  2. 中に何を入れrequirejs-config.jsたらいいですか?

  3. .jsファイル内のコードはどのように見えますか?jQueryを使用することはできずdocument.readydefine([

  4. 中に何を入れdefine([たらいいですか?

  5. サードパーティのjQueryモジュールがある場合、それらを機能させるには編集する必要がありますか?

  6. my.jsファイルが存在することをmagentoに伝えるために、xmlをどこかに配置する必要がありますか?

  7. 内部app/codeにすべてのjsコードを含むモジュールを作成すると、すべてのページにすべてのものが含まれますか?どうすればそれを達成できますか?

回答:


65

main.js(RequireJS-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.jsrequirejs-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
アンドレア

私が必要と-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を報告し、javascriptコンソールにエラーがある場合は報告してください。ここに質問をリンクしていただければ、喜んでお手伝いさせていただきます:)
アンドレア

さらに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

がんばろう!

ところで、基本を得るためにmagentoのフロントエンドdevdocs公式を読んでください:)


BootstrapのスクリプトではJQueryを初期化する必要があるため、頭部に含めると動作しません。この公式ドキュメントを読んでください。詳細については。:)
VS

2

default_head_blocks.xmlファイルを使用してjsを追加する方法は、サードパーティのJQueryプラグインでは機能しません。そのため、カスタムJQueryプラグインを追加して使用する場合は、requirejs-config.jsファイルを使用する必要があります。

質問に1つずつ答えるには:

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([JavaScriptプラグインを作成している場合を除き、を使用する必要はありません。

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 Libraryをダウンロードして、パスに従ってテーマに追加します。

// 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ファイルが必要な特定のページを指定する方法はありますか?
モハメッドジョレイド

特定のページについては、上記の例の「default_head_blocks.xml」コンテンツを特定のレイアウトファイルに移動します。たとえば、製品の詳細ページの場合、app / design / frontend / Namespace / themename / Magento_Catalog / layout / catalog_product_view.xmlでそのxmlを追加します
saiid
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.