it-swarm-eu.dev

jak poslat proměnnou ze souboru .php do souboru .js?

Doufám, že mi někdo pomůže. Problém je následující: 1) Mám modul, ve kterém přiřaďte proměnnou, kterou chcete odeslat do souboru šablony php.tpl.

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

Tuto proměnnou lze zobrazit v souboru php.tpl jako

<?php print $testvar?>

2) Mám samostatný soubor .js Jak mohu získat přístup k této proměnné uvnitř souboru .js?

Vím, jak to bude, pokud je soubor .js uvnitř .php.tpl:

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

Problém je, jak to udělat, pokud jsou tyto dva soubory .js a .php.tpl odděleny?

37
Alexey

Ve svém modulu byste měli použít drupal_add_js() , není třeba na výstupu proměnné ve vašem .tpl.php:

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

A ve svém JavaScriptu můžete získat přístup k hodnotě v Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

Přímé použití globálních proměnných (jak je naznačeno v ukázce kódu) je v JavaScriptu neodraditelnou praxí, protože nepořádek globálního jmenného prostor . Pokud je váš kód spuštěn také při načítání stránky, zkontrolujte sekci „Chování“ v dokumentaci Správa JavaScriptu v Drupal 7 dokumentování (celá stránka stojí za přečtení).

65
Pierre Buyle

V souboru MODULENAME.module použijte následující kód.

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

A v MODULENAME.js použijte následující.

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

})(jQuery);

Tímto způsobem můžete předat svou proměnnou PHP) do JavaScriptu a použít ji.

17
Himanshu Pathak

Pro Drupal 8 byla drupal_add_js() odstraněna (byla zastarána v Drupal 7 již) = = > další informace viz. .

Způsob, jak poslat PHP informace do Javascriptu, je dokonale popsán podle @ 4k4 je odpověď na podobnou otázku.

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

V JavaScriptu je lze použít takto:

(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