come inviare variabili dal file .php al file .js?


37

Spero che qualcuno sia in grado di aiutarmi. Il problema è il seguente: 1) Ho un modulo in cui assegnare una variabile per inviare al file modello php.tpl

<?php
...
$testvar="Hello from alex!";
$variables['testvar'] = $testvar; 
...
?>

Questa variabile può essere mostrata nel file php.tpl come

<?php print $testvar?>

2) Ho separato il file .js Come posso accedere a questo variegabile file .js?

So come sarà se il file .js è all'interno di .php.tpl:

<?php
$testvar="Hello from alex!";
?>
<script type="text/javascript">
var myVar = '<?php print $testvar?>';
</script>

Il problema è come fare lo stesso se questi due file .js e .php.tpl sono separati?


2
non fare eco alla cieca di una variabile in Javascript. Se sono presenti metacaratteri Javascript (virgolette singole, in particolare), verranno introdotti errori di sintassi. Fai var myVar = <?php echo json_encode($testvar) ?>;ciò che si occuperà di tali problemi per te, indipendentemente dal tipo / contenuto dei dati di PHP var.

Elenco di suggerimenti e trucchi per Drupal 7 js browse-tutorials.com/tutorial/javascript-drupal-7
ram4nd

Risposte:


65

Dovresti usare drupal_add_js()nel tuo modulo, non è necessario generare la variabile nel tuo .tpl.php:

drupal_add_js(array('YOURMODULE' => array('testvar' => $testvar)), array('type' => 'setting'));

E nel tuo JavaScript, puoi accedere al valore in Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

L'uso diretto delle variabili globali (come suggerito nell'esempio di codice) è una pratica scoraggiata in JavaScript poiché ingombra lo spazio dei nomi globale . Inoltre, se il tuo codice viene attivato al caricamento della pagina, controlla la sezione "Comportamenti" in Gestione JavaScript nella documentazione di Drupal 7 (vale la pena leggere l'intera pagina).


17

Nel tuo file MODULENAME.module usa il seguente codice.

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

E in MODULENAME.js usa il seguente.

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

})(jQuery);

In questo modo, puoi passare la tua variabile PHP a JavaScript e usarla.


Cosa fa la funzione e quando viene attivata? Perché non utilizzare direttamente Drupal.settings.YOURMODULE.testvar?
Incredibile

5

Per Drupal 8 , è drupal_add_js()stato rimosso (era già obsoleto in Drupal 7) => vedere questo per ulteriori informazioni .

Il modo di inviare informazioni PHP a Javascript è perfettamente descritto dalla risposta di @ 4k4 a una domanda simile.

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,  // <== 
      ],
    ],
  ],
];

In JavaScript, possono essere utilizzati come segue:

(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);

Vale la pena ricordare che nel *.libraries.ymlci dovrebbe essere anche definita una dipendenza - core/drupalSettings.
leymannx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.