Para cargar un main.js
archivo personalizado en todas las páginas (en el modo RequireJS), esta es una buena manera:
1) Crear main.js
Crear main.js
dentro de la carpeta del tema
<theme_dir>/web/js/main.js
con este contenido:
define([
"jquery"
],
function($) {
"use strict";
// Here your custom code...
console.log('Hola');
});
En resumen : declaramos dependencias al inicio, por ejemplo "jquery"
. Definimos como parámetro de la función el nombre de la variable para usar la dependencia dentro de la función, por ejemplo "jquery" --> $
. Ponemos todo nuestro código personalizado dentro function($) { ... }
.
2) Declarar main.js
con un requirejs-config.js
archivo
Cree un requirejs-config.js
archivo dentro de la carpeta del tema:
<theme_dir>/requirejs-config.js
con este contenido:
var config = {
// When load 'requirejs' always load the following files also
deps: [
"js/main"
]
};
"js/main"
Es el camino a nuestra costumbre main.js
. La extensión ".js" no es necesaria.
Nuestro requirejs-config.js
se fusionará con otro requirejs-config.js
definido en Magento.
RequireJS cargará nuestro main.js
archivo, en cada página, resolviendo dependencias y cargando archivos de forma asíncrona.
Opcional: incluye biblioteca de terceros
Esta es la forma de incluir bibliotecas de terceros.
1) Agregue la biblioteca en web/js
:
<theme_dir>/web/js/vendor/jquery/slick.min.js
2) Abra requirejs-config.js
y agregue este contenido:
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',
}
}
};
Parece más complicado de lo que realmente es.
3) Agregue la dependencia dentro de main.js
:
define([
'jquery',
'slick'
],
function($) {
// ...
});
bootstrap.js
de la misma manera que incluíslick.js
en el ejemplo anterior. Para el valor de cuña, puede intentar usar esto:'bootstrap': { deps: ["jquery"], exports: '$.fn.popover' }
como se explica aquí: 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!']);
Mi minicart deja de funcionar con estoDuplicar el archivo:
A
Para más información:
http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/xml-manage.html
¡Buena suerte!
Por cierto, lea el frontend devdocs oficial de magento para obtener el básico :)
fuente
Puede agregar archivos JS usando xml como se muestra a continuación. Esto agregará js en todas las páginas.
Con módulo personalizado:
Crea un
default.xml
archivo en tu módulo.app/code/vendor_name/module_name/view/frontend/layout/default.xml
fuente
El método de agregar js usando el
default_head_blocks.xml
archivo no funcionará para los complementos JQuery de terceros. Por lo tanto, si desea agregar complementos JQuery personalizados y usarlos, deberá usar elrequirejs-config.js
archivo.Para responder a sus preguntas una por una:
1) y 2) No necesita crear un módulo para agregar el
requirejs-config.js
archivo. Simplemente puede agregarlo en esta ubicación:app/design/frontend/<Vendor>/<theme>/requirejs-config.js
Consulte esta respuesta para crear un
requirejs-config.js
archivo adecuado .3) Deberá enumerar las dependencias de su archivo js antes de escribir sus scripts.
El código anterior dice que necesitará jquery y jquery ui para sus scripts.
4) No necesita usar el a
define([
menos que esté creando un complemento de JavaScript.5) No, no necesita editarlos, pero deberá especificar su dependencia utilizando el
requirejs-config.js
archivo. Si usted tieneowl.carousel.min.js
en<vendor>/<theme>/web/js/owl.carousel.min.js
, elrequirejs-config.js
archivo se vería así:En el código anterior, recuerde que no hay ningún
.js
archivo. Y ahora para usarlo en tu jsSi todo funciona bien, debe tener sus enlaces de pie de página en un control deslizante.
6) y 7) Simplemente use el método sugerido por @Goldy para agregar su js. Agregará su archivo js a todas las páginas.
Para leer más, puedes mirar esta publicación
Espero que esto ayude.
fuente
Así es como agrego la biblioteca dotdotdot en mi tema personalizado magento2.
1. Descargue y agregue Js Library en su tema siguiendo la ruta:
2. Cree el archivo requirejs de un tema de la siguiente manera y permita que los requirejs conozcan la biblioteca recién agregada.
3. Use la biblioteca agregada en el archivo js principal de su tema de la siguiente manera:
4. e incluya el archivo js de su tema en la cabeza de su sitio de la siguiente manera:
Puede agregar cualquier biblioteca JS externa y archivo personalizado en cada página en magento2.
fuente