Use require-config.js para cargar los archivos necesarios en todas las páginas


9

Sé cómo usar require-config.jsun tema personalizado, pero me gustaría usar un archivo javascript personalizado ( myfile.js) en todas las páginas. ¿En qué directorio debo agregar require-config.jsy cómo usarlo, para que funcione como debería?

Por favor, no haga referencia a la página oficial de Magento.


Puede llamar directamente a js dentro de la etiqueta de encabezado xml de diseño y tiene js en cada página.
Rakesh Jesadiya

Gracias por su respuesta. Pero si quisiera usar require-config y cargar archivos con él, ¿no como en Magento 1?
Anitr

También es compatible con magento 2, puede consultar el diseño de la carpeta del tema del módulo / archivo default_head_block.xml
Rakesh Jesadiya

Sí, lo sé. Pero, quiero usar require-config.js de la manera correcta.
Anitr

Respuestas:


17

requirejs-config.jsutiliza para crear la asignación de recursos de JavaScript . Podemos encontrar todos requieren configuraciones en: pub/static/_requirejs.

Hasta donde sé, la forma correcta de cargar nuestro script personalizado a través de Require Js: usando la plantilla para llamar a nuestro script . Crearemos una nueva plantilla con Magento\Framework\View\Element\Templatesu clase de bloque.

Si queremos cargar archivos js en todas las páginas y no queremos crear un nuevo módulo, nuestro bloque debe hacer referencia al módulo Tema de Magento before.body.endoafter.body.start container en él default.xml.

ingrese la descripción de la imagen aquí

app / design / frontend / Vendor / Theme / Magento_Theme / layout / default.xml

<?xml version="1.0"?>

<page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">

    <referenceContainer name="after.body.start">
        <block class="Magento\Framework\View\Element\Template" name="custom.js" template="Magento_Theme::custom_js.phtml"/>
    </referenceContainer>

</page>

app / design / frontend / Vendor / Theme / requirejs-config.js

var config = {
    map: {
        '*': {
            customScript:'Magento_Theme/js/customscript'
        }
    }
};

app / design / frontend / Vendor / Theme / Magento_Theme / web / js / customcript.js

define('jquery', function($) {

    //Your code here
    //alert('Here');

    }(jQuery)
);

Nuestra plantilla llamará a nuestro script: app / design / frontend / Vendor / Theme / Magento_Theme / templates / custom_js.phtml

<script>// <![CDATA[
    require([
        'jquery',
        'customScript'
    ], function ($, script) {
        //Your code here
        //alert('Here');
    });
    // ]]>
</script>

Borre Magento Cache y ejecute la implementación de contenido estático: php bin/magento setup:static-content:deploy


\app\design\frontend\Enim\blank\Magento_CatalogWidget\templates\product\widget\content\grid.phtmlInvoco mi script , pero tengo requirejs-config.js y script en la carpeta Theme (app / design / frontend / Vendor / Theme / requirejs-config.js). ¿Esta bien? El problema es que llamo a mi script desde múltiples lugares diferentes.
Anitr

Su secuencia de comandos solo afecta cuando templa‌​tes\product\widget\c‌​ontent\grid.phtmlse llama a la plantilla .
Khoa TruongDinh

Sí, está bien, el problema es ese: magento.stackexchange.com/questions/149019/… , me pregunto si este problema está relacionado de alguna manera con la llamada requirejs.
Anitr

@KhoaTruongDinh Estoy un poco confundido por esto. Todavía no lo he probado correctamente, pero ¿estoy en lo cierto al pensar que la función custom_js.phtmlse trata como una devolución de llamada normal, realizada después de la ejecución del código que contiene customscript.js? ¿O necesitaría ejecutar el código declarado customscript.jsdesde dentro de la función en custom_js.phtml?
Joshua Flood

1
@KhoaTruongDinh También me pregunto por qué la respuesta de Iveta dice que tu after.body.startdebería cambiarse a before.body.end.
Joshua Flood

5

Archivo requirejs-config: app / code / Vendor / Module / view / frontend / requirejs-config.js

var config = {
    paths: {            
         'myfile': "Vendor_Modulename/js/myfile"
      },   
    shim: {
    'myfile': {
        deps: ['jquery']
    }
  }
} 

Su archivo js debe estar en: app / code / Vendor / Module / view / frontend / web / js / myfile.js

Ahora puede usar cualquier parte de su archivo de plantilla con el siguiente método:

<srcipt>
 require(["jquery","myfile"],function($,myfile){
     $(document).ready(function(){
        //call your js here...
     })
 })
</script>

Si eso es correcto. Pero pregunté si alguien sabe cómo usarlo en la carpeta Tema, sin depender del Módulo: debe cargarse en la página, no solo en un módulo.
Anitr

puede usarlo en la carpeta de temas también, solo llame al script anterior y puede usar su js
Rakesh Jesadiya

por favor avíseme si tiene algún problema
Rakesh Jesadiya

Funciona, gracias. Pero aún así, tengo problemas con alguna otra cosa: magento.stackexchange.com/questions/149019/…
Anitr

Hola, por favor, hágame saber dónde colocar el archivo de primer paso?
Priya

2

Hay una versión más fácil de usar deps. Las dependencias en requirejs-config.js cargarán su archivo al cargar requirejs (en todas partes de la tienda). Aquí hay un ejemplo de cómo debería verse su requirejs-config.js :

var config = {
    // When load 'requirejs' always load the following files also
    deps: [
        'common-js'
    ],

    // Library file path.
    paths: {
        'common-js': 'js/Your-File-Name'
    },

    // The rest of your config file ...

1

Como un enfoque alternativo a la recomendación de Khoa, que es una excelente práctica de desarrollo de Magento, puede pegar su JavaScript en un archivo .phtml como este:

<srcipt>
require(["jquery"],function($){
 $(document).ready(function(){
    your script here...
 })
});
</script>

Luego vincule su archivo phtml de default.xml como se describe en la respuesta de Khoa, aunque recomendaría agregarlo a before.body.end. Y luego llame a su script JS desde copyright.phtml , de esta manera:

<script>
jQuery(document).ready(function($) {
..call your script here ..
});
</script>

copyright.phtml se carga en cada página, incluso en páginas como el pago, donde se omite el pie de página.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.