web-dev-qa-db-fra.com

Comment passer des variables à JavaScript?

Dans votre fichier MODULENAME.module:

$testVariable = 'himanshu';
drupal_add_js(array('MODULENAME' => array('testvar' => $testVariable)), array('type' => 'setting'));
drupal_add_js(drupal_get_path('module', 'MODULENAME') . '/MODULENAME.js');

Dans le fichier MODULENAME.js:

    (function($) {
      Drupal.behaviors.MODULENAME = {
        attach: function (context, settings) {
          alert(settings.MODULENAME.testvar);
        }
      };

})(jQuery);

de cette façon, vous pouvez passer votre variable php dans drupal fichier javascript et utiliser la variable :)

Comment puis-je implémenter ce qui précède dans Drupal 8?

6
harshal

Au lieu de drupal_add_js(array('MODULENAME' => array('testvar' => $testVariable)), array('type' => 'setting')); vous utilisez $build['#attached']['drupalSettings']['testvar'] = $testVariable;. Remplacez $build Par la variable contenant le formulaire ou le tableau de rendu auquel les paramètres sont attachés; dans un générateur de formulaire ou hook_form_alter(), ce serait $form.

Le code JavaScript à attacher à la page doit alors être défini comme bibliothèque, qui est le seul moyen d'attacher JavaScript et CSS à une page ou un formulaire.
Il est expliqué dans Ajout de feuilles de style (CSS) et JavaScript (JS) à un Drupal 8 , donc je ne le répéterai pas ici. Je remarquera simplement que la bibliothèque doit déclarer au moins deux dépendances:

  • core/jquery, si le code JavaScript utilise jQuery
  • core/drupalSettings, car le code JavaScript utilise Drupal
15
kiamlaluno

Une autre façon de le faire (comme mentionné dans normes JS ) serait:

$element['#attached']['js'][] = array(
  'data' => array('myModule' => array('basePath' => base_path())), 
  'type' => 'setting',
);

Cette variable serait alors référencée du côté JS comme:

Drupal.settings.myModule.basePath;
0
Top-Master