Comment charger le fichier js du module personnalisé dans magento 2?

9

J'ai créé un module de curseur de bannière pour magento 2. J'ai appelé le fichier JS en utilisant les méthodes suivantes et son bon fonctionnement. Dans la classe de bloc, j'ai créé la fonction suivante

public function getBaseJs($fileName){

        return $this->_storeManager->getStore()->getBaseUrl(
                \Magento\Framework\UrlInterface::URL_TYPE_MEDIA
            ).'bannerslider/js/'.$fileName;
    }

et cette fonction est appelée dans le bannerslider.phtmlfichier de la manière suivante.

<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery-1.7.min.js') ?>"></script>
<script type="text/javascript" src="<?php echo $this->getBaseJs('jquery.flexslider.js') ?>"></script>

Mais, selon le mécanisme de dépendance jQuery de require.jsComment puis-je le faire?

Praful Rajput
la source

Réponses:

29

Enfin, j'ai obtenu la solution pour ma requête. Je voudrais le partager en détails comme ci-dessous.

entrez la description de l'image ici

Étape 1: ajoutez votre fichier js de module sous<Vendor>/<Module_Name>/view/<area>/web/js/

par exemple <Vendor>/<Module_Name>/view/<area>/web/js/flexslider.js

Étape 2: créer un requirejs-config.jsfichier sous<Vendor>/<Module_Name>/view/<area>/

par exemple <Vendor>/<Module_Name>/view/<frontend>/requirejs-config.js

Ajoutez le code suivant à requirejs-config.js

var config = {
    map: {
        '*': {
            bannerslider: 'VendorName_ModuleName/js/flexslider'
        }
    }
};

Remarque: vous pouvez définir le nom de votre objet selon votre choix. Dans mon cas, j'ai défini comme bannerslideret n'ajoute pas l'extension .js au nom de fichier dansVendorName_ModuleName/js/flexslider

Étape 3: Appelez le fichier functionjs de votre module dans le .phtmlfichier de la manière suivante.

<script type="text/javascript">
    require(['jquery','bannerslider'],function($){
        $(window).load(function() {
            $('.flexslider-8').flexslider({
                animation: "fade",
                controlNav: "thumbnails",
                slideshowSpeed: 2000,
                minItems: 2,
                maxItems: 4
            });
        });

    });
</script>

Cela fonctionne bien pour moi.

Trace: utilisez l' Netonglet pour voir l'URL demandée du fichier js chargé ou non.

entrez la description de l'image ici

Praful Rajput
la source
4
mieux utiliser 'domReady!' plugin au lieu de $ (window) .load (), par exemple require (['jquery', 'bannerslider', 'domReady!], function ($) {... le code ne s'exécute qu'après le chargement de dom})
KAndy
Oui, ce sera très utile.
Praful Rajput
@KAndy cela dépend, si vous voulez que le script s'exécute en dernier, n'est-il pas préférable d'utiliser $ (fenêtre)? cela ne fait-il pas que le script s'exécute non seulement lorsque DOM est lu, mais lorsque tous les scripts sont exécutés?
Lachezar Raychev
Et cette façon ne fonctionne pas pour moi ... dit static / adminhtml / Magento / backend / en_US / gift.js 404 (Introuvable) J'ai effacé le cache et le pub / static ... bot nope .. ne fonctionne pas
Lachezar Raychev
grattez ça, ça marche ... domReady! ne fonctionne pas ... comment puis-je dire à un script de s'exécuter après que tous les autres scripts ont été chargés, ou cela n'existe pas dans la méthodologie magent2 actuelle?
Lachezar Raychev
4

Ma façon est:

Étape 1

Incluez le fichier javascript de base d'une extension à l'aide des instructions de mise en page.

Étape 2

Exiger les autres fichiers javascript de l'extension du fichier de base avec RequireJS:

require(
    [
      'jquery', 
      '{VendorName}_{ModuleName}{path_to_js_file/relative_to/view/web/no_js_at_end}'
     // ex. Magento/Ui/view/base/web/js/grid/sticky/sticky.js
     // became Magento_Ui/js/grid/sticky/stick
    ], 
    function($, someOtherLibrary) {
        // custom code here...
    );
});
Mage2.PRO
la source
1
a obtenu une erreur require n'est pas définie, car mon js est chargé avant requirejs
simple guy