web-dev-qa-db-fra.com

comment envoyer une variable d'un fichier .php vers un fichier .js?

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?

39
Alexey

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).

67
Pierre Buyle

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).

17
Himanshu Pathak

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);
5
Florian Müller