J'espère que quelqu'un pourra m'aider. Le problème est le suivant: 1) J'ai un module dans lequel assigner la variable afin de l'envoyer au fichier 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 avoir accès à ce fichier varuiable à l'intérieur du fichier .js?
Je sais comment ce sera si le fichier .js est à l'intérieur de .php.tpl:
<?php
$testvar="Hello from alex!";
?>
<script type="text/javascript">
var myVar = '<?php print $testvar?>';
</script>
Le problème est de savoir comment faire de même si ces deux fichiers .js et .php.tpl sont séparés?
Vous devez utiliser drupal_add_js()
dans votre module, il n'est pas nécessaire de sortir la variable dans votre .tpl.php
:
drupal_add_js(array('YOURMODULE' => array('testvar' => $testvar)), array('type' => 'setting'));
Et dans votre JavaScript, vous pouvez accéder à la valeur dans Drupal.settings.YOURMODULE.testvar
:
alert(Drupal.settings.YOURMODULE.testvar);
L'utilisation directe des variables globales (comme suggéré dans votre exemple de code) est une pratique découragé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" dans Gestion de JavaScript dans Drupal 7 documentation (toute la page vaut la peine d'être lue).
Dans votre fichier MODULENAME.module, utilisez le code suivant.
$testVariable = 'himanshu';
drupal_add_js(array('MODULENAME' => array('testvar' => $testVariable)), array('type' => 'setting'));
drupal_add_js(drupal_get_path('module', 'MODULENAME') . '/MODULENAME.js');
Et dans MODULENAME.js, utilisez le suivant.
(function($) {
Drupal.behaviors.MODULENAME = {
attach: function (context, settings) {
alert(settings.MODULENAME.testvar);
}
};
})(jQuery);
De cette façon, vous pouvez passer votre variable PHP à JavaScript et l'utiliser).
Pour Drupal 8 , drupal_add_js()
a été supprimé (il était obsolète dans Drupal 7 déjà) = > voir ceci pour plus d'informations .
La façon d'envoyer PHP informations à Javascript est parfaitement décrite par la réponse de @ 4k4 à une question similaire.
return [
'#theme' => 'item_list',
'#list_type' => 'ul',
'#items' => $my_items,
'#attributes' => ['class' => 'some_class'],
'#attached' => [
'library' => ['my_module/my_library'],
'drupalSettings' => [
'my_library' => [
'some_variable1' => $value, // <== Variables passed
'another_variable' => $take_this, // <==
],
],
],
];
En JavaScript, ils peuvent être utilisés comme suit:
(function ($, Drupal, drupalSettings) {
Drupal.behaviors.my_library = {
attach: function (context, settings) {
alert(drupalSettings.my_library.some_variable); //alerts the value of PHP's $value
}
};
})(jQuery, Drupal, drupalSettings);