Comment passer une variable à un js externe dans magento 2

9

Dans magento 1

on peut appeler cette fonction prototype en phtml par exemple

function ABC(){
     var a = '<?php echo $a;?>'
    alert(a);
 }

mais dans magento 2 on ne peut pas ajouter ce type de fonction en phtml, pour cela il faut créer requirejs-config.js

var config = {
map: {
    '*': {
        'exam': 'js/example',
    }
}
};

comme ceci et example.js

 function ABC(){

    alert(a);
 }

en phtml

require(['jquery','exam'], function($){
    var a= <?php echo $a; ?>;
});

J'essaye de passer une variable comme ça mais ça ne fonctionne pas, comment passer une variable de phtml à js externe dans magento 2

Débutant
la source

Réponses:

19

Il existe deux façons d'inclure javascript à partir du modèle dans Magento 2: <script type="text/x-magento-init">l' data-mage-initattribut et. L'une ou l'autre façon peut être utilisée pour transmettre des données au script dans la définition json. Par exemple, en utilisant la balise de script x-magento-init, dans le modèle, vous avez:

<script type="text/x-magento-init">
    {
        "*": {
            "js/example": {
                "a": "<?php echo 'Hello from template' ?>"
            }
        }
    }
</script>

Et dans le fichier JS, vous avez:

define([
    'jquery'
], function ($) {
    'use strict';

    return function (config) {
        console.log(config); // will output {a: "Hello from template"}
        alert(config.a); // would be equal to alert("Hello from template");
    }
});
Aaron Allen
la source
J'utilise ce code, mais mon alerte apparaît deux fois, mais si j'écris une alerte avant "fonction de retour (config) {" elle n'apparaît qu'une seule, je ne trouve pas pourquoi les alertes à l'intérieur "fonction de retour (config) {"arrivent deux fois.
Deepika Janiyani
Grande info, mais comment pourrais-je accéder aux données de l'objet config à partir d'un autre fichier js? Par exemple, si j'ai envoyé les données ci-dessus - '"a": "<? Php echo' Hello from template '?>" Vers un fichier js / model / example.js, comment puis-je extraire ces données dans une vue / fichier sample.js? Merci beaucoup!
MikeMason
Essayer de transmettre des données entre différents fichiers .js semble ne pas fonctionner. Vous pouvez simplement transmettre les données aux configurations des deux fichiers dans le modèle. Ou, si vous avez des données que vous souhaitez être accessibles à divers fichiers js, vous pouvez utiliser le mécanisme de «contenu privé» de Magento: devdocs.magento.com/guides/v2.0/config-guide/cache/… qui est ce qui est utilisé en interne pour le mini-chariot, les données clients, comparer les produits, etc.
Aaron Allen
2
En remarque, si vous essayez ceci et que cela ne fonctionne pas, assurez-vous que vous utilisez defineet non require. Cela ne fonctionne pas lors de l'utilisation require.
Ben Crook
@ Aaron Allen Très bonne réponse
Pandurang