Чтобы загрузить пользовательский main.js
файл на всех страницах (в RequireJS-способе), это хороший способ:
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.js
будут объединены с другими requirejs-config.js
определенными в Magento.
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
же, как я включилslick.js
в приведенный выше пример. Для значения shim вы можете попытаться использовать это:,'bootstrap': { deps: ["jquery"], exports: '$.fn.popover' }
как объяснено здесь: stackoverflow.com/a/13556882/3763649var 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!']);
Моя миникарта перестает работать с этимДублируйте файл:
к
За дополнительной информацией:
http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/xml-manage.html
Удачи!
КСТАТИ, прочитайте официальный интерфейс DevDocs от magento, чтобы получить основные :)
источник
Вы можете добавить файлы JS, используя xml, как показано ниже. Это добавит JS на всех страницах.
С пользовательским модулем:
Создайте
default.xml
файл в вашем модуле.app/code/vendor_name/module_name/view/frontend/layout/default.xml
источник
Метод добавления js с использованием
default_head_blocks.xml
файла не будет работать для сторонних плагинов JQuery. Итак, если вы хотите добавить собственные плагины JQuery и использовать их, вам нужно будет использоватьrequirejs-config.js
файл.Чтобы ответить на ваши вопросы по одному:
1) и 2) Вам не нужно создавать модуль для добавления
requirejs-config.js
файла. Вы можете просто добавить его в это место:app/design/frontend/<Vendor>/<theme>/requirejs-config.js
Обратитесь к этому ответу для создания правильного
requirejs-config.js
файла.3) Вам нужно будет перечислить зависимости вашего js-файла, прежде чем писать свои сценарии.
Приведенный выше код говорит, что вам понадобятся 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
файл будет выглядеть следующим образом :В приведенном выше коде, пожалуйста, помните, что
.js
для файла нет. И теперь, чтобы использовать его в вашем JSЕсли все работает хорошо, у вас должны быть ссылки на нижний колонтитул в слайдере.
6) и 7) Просто используйте метод, предложенный @Goldy, чтобы добавить свой js. Он добавит ваш файл JS на все страницы.
Для дальнейшего чтения вы можете посмотреть этот пост
Надеюсь это поможет.
источник
Вот как я добавляю библиотеку dotdotdot в мою пользовательскую тему magento2.
1. Загрузите и добавьте Js Library в свою тему, следуя по пути:
2. Создайте файл requirejs темы следующим образом и дайте знать requirejs недавно добавленную библиотеку.
3. Используйте добавленную библиотеку в основном js-файле вашей темы следующим образом:
4. и включите файл js вашей темы в заголовок вашего сайта следующим образом:
Вы можете добавить любую внешнюю библиотеку JS и пользовательский файл на каждую страницу в magento2.
источник