it-swarm.it

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

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 si trova 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?

39
Alexey

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 in quanto ingombra lo spazio dei nomi globale . Inoltre, se il tuo codice viene attivato al caricamento della pagina, controlla la sezione "Comportamenti" in Gestione di JavaScript nella documentazione Drupal 7 (vale la pena leggere l'intera pagina).

67
Pierre Buyle

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.

17
Himanshu Pathak

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

Il modo di inviare 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);
5
Florian Müller