J'espère que quelqu'un pourra m'aider. Le problème est le suivant: 1) J'ai un module dans lequel un attribuer la variable afin d'envoyer au fichier de modèle php.tpl
<?php
...
$testvar="Hello from alex!";
$variables['testvar'] = $testvar;
...
?>
Cette variable peut être affichée dans le fichier php.tpl comme
<?php print $testvar?>
2) J'ai un fichier .js séparé. Comment puis-je accéder à ce fichier variable dans le fichier .js?
Je sais comment ça se passera si le fichier .js est à l'intérieur du fichier .php.tpl:
<?php
$testvar="Hello from alex!";
?>
<script type="text/javascript">
var myVar = '<?php print $testvar?>';
</script>
Le problème est comment faire la même chose si ces deux fichiers .js et .php.tpl sont séparés?
7
javascript
Alexey
la source
la source
var myVar = <?php echo json_encode($testvar) ?>;
ce qui s’occupe de ces problèmes pour vous, quel que soit le type de données / le contenu de la variable PHP.Réponses:
Vous devriez utiliser
drupal_add_js()
dans votre module, il n'est pas nécessaire de sortir la variable dans votre.tpl.php
:Et dans votre JavaScript, vous pouvez accéder à la valeur en
Drupal.settings.YOURMODULE.testvar
:L'utilisation directe de variables globales (comme suggéré dans votre exemple de code) est une pratique déconseillée en JavaScript car elle encombre l'espace de noms global . De plus, si votre code est déclenché au chargement de la page, consultez la section "Comportements" de la rubrique Gestion de JavaScript dans la documentation de Drupal 7 (la page entière mérite d'être lue).
la source
Dans votre fichier MODULENAME.module, utilisez le code suivant.
Et dans MODULENAME.js, utilisez le suivant.
De cette façon, vous pouvez passer votre variable PHP à JavaScript et l'utiliser.
la source
Pour Drupal 8 , a
drupal_add_js()
été supprimé (il était déjà obsolète dans Drupal 7) => voir ceci pour plus d’informations .Le moyen d'envoyer des informations PHP sur Javascript est parfaitement décrit par la réponse de @ 4k4 à une question similaire.
En JavaScript, ils peuvent être utilisés comme suit:
la source
*.libraries.yml
Il convient de mentionner que dans le, il devrait également y avoir une dépendance définie pour- core/drupalSettings
.