Utilizzare require-config.js per caricare i file necessari su tutte le pagine


9

So come utilizzare il require-config.jstema personalizzato, ma vorrei utilizzare il file javascript personalizzato ( myfile.js) su tutte le pagine. In quale directory dovrei aggiungere require-config.jse come usarlo, in modo che funzioni come dovrebbe?

Per favore, non fare riferimento alla pagina ufficiale di Magento.


Puoi chiamare direttamente js all'interno del tag head xml del layout e hai js in ogni pagina.
Rakesh Jesadiya,

La ringrazio per la risposta. Ma se vorrei usare request-config e caricare i file con esso, non come in Magento 1?
Anitr,

Il suo supporto anche in magento 2 è possibile controllare il layout della cartella del tema del modulo / file default_head_block.xml
Rakesh Jesadiya,

Si, lo so. Tuttavia, voglio usare Require-config.js nel modo corretto.
Anitr,

Risposte:


17

requirejs-config.jsutilizza per la creazione della mappatura delle risorse JavaScript . Possiamo trovare tutti richiedono configurazioni sotto: pub/static/_requirejs.

Per quanto ne so, il modo corretto di caricare il nostro script personalizzato tramite Require Js: utilizzando il modello per chiamare il nostro script . Creeremo un nuovo modello con la Magento\Framework\View\Element\Templatesua classe di blocco.

Se vogliamo caricare i file js su tutte le pagine e non vogliamo creare un nuovo modulo, il nostro blocco dovrebbe fare riferimento a before.body.endoafter.body.start container in default.xml- Modulo tema Magento.

inserisci qui la descrizione dell'immagine

app / design / frontend / Venditore / a tema / 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 / Venditore / a tema / requirejs-config.js

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

app / design / frontend / Venditore / a tema / Magento_Theme / web / js / customscript.js

define('jquery', function($) {

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

    }(jQuery)
);

Il nostro modello chiamerà il nostro 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>

Svuota la cache Magento ed esegui la distribuzione di contenuto statico: php bin/magento setup:static-content:deploy


Richiamo il mio script \app\design\frontend\Enim\blank\Magento_CatalogWidget\templates\product\widget\content\grid.phtml, ma ho requirejs-config.js e lo script nella cartella Temi (app / design / frontend / Vendor / Theme / requirejs-config.js). Va bene? Il problema è che chiamo la mia sceneggiatura da più luoghi diversi.
Anitr

Lo script ha effetto solo quando templa‌​tes\product\widget\c‌​ontent\grid.phtmlviene chiamato il modello .
Khoa TruongDinh

Sì, va bene - il problema è con quello: magento.stackexchange.com/questions/149019/… , mi chiedo se questo problema sia in qualche modo collegato alla chiamata requestjs.
Anitr

@KhoaTruongDinh Sono un po 'confuso da questo. Non ho ancora testato correttamente, ma ho ragione nel pensare che la funzione in custom_js.phtmlsia trattata come un callback regolare, eseguito dopo l'esecuzione del codice contenuto all'interno customscript.js? O dovrei eseguire il codice dichiarato customscript.jsdall'interno della funzione in custom_js.phtml?
Joshua Flood

1
@KhoaTruongDinh Mi chiedo anche perché la risposta di Iveta afferma che after.body.startdovresti cambiarla before.body.end?
Joshua Flood,

5

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

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

Il tuo file js dovrebbe essere in: app / code / Vendor / Module / view / frontend / web / js / myfile.js

Ora puoi usare ovunque nel tuo file modello con il metodo seguente:

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

Sì, è corretto. Ma ho chiesto se qualcuno sa come usarlo nella cartella Tema, non in base al Modulo: dovrebbe essere caricato su tutta la pagina, non solo su un modulo.
Anitr,

puoi usarlo anche nella cartella dei temi, basta chiamare sopra lo script e puoi usare il tuo js
Rakesh Jesadiya il

per favore fatemi sapere se avete qualche problema
Rakesh Jesadiya,

Funziona, grazie. Tuttavia, sto riscontrando
Anitr

Ciao, per favore fatemi sapere dove posizionare il primo file di passaggio?
Priya,

2

È disponibile una versione più semplice deps. Le dipendenze in requestjs-config.js caricheranno il tuo file quando caricherai stesso Requjs (ovunque nel negozio). Ecco un esempio di come dovrebbe apparire il tuo requestjs-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

Come approccio alternativo alla raccomandazione di Khoa, che è un'ottima pratica di sviluppo Magento, puoi incollare il tuo JavaScript in un file .phtml come questo:

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

Quindi collega il tuo file phtml da default.xml come descritto nella risposta di Khoa, anche se consiglierei di aggiungerlo a before.body.end. E poi chiama il tuo script JS da copyright.phtml , in questo modo:

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

copyright.phtml viene caricato su ogni pagina, anche su pagine come il checkout, dove viene omesso il piè di pagina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.