web-dev-qa-db-ja.com

変数を.phpファイルから.jsファイルに送信する方法

誰かが私を助けてくれることを願っています。問題は次の1つです。1)テンプレートファイルphp.tplに送信するために変数を割り当てるモジュールがあります。

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

この変数は、php.tplファイルで次のように表示できます。

<?php print $testvar?>

2).jsファイルを分離しました.jsファイル内のこの可変のファイルにアクセスするにはどうすればよいですか?

.jsファイルが.php.tpl内にある場合の状況を知っています。

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

問題は、これらの2つのファイル.jsと.php.tplが分離されている場合に同じことを行う方法ですか?

39
Alexey

モジュールでは drupal_add_js() を使用する必要があります。.tpl.phpで変数を出力する必要はありません。

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

また、JavaScriptでDrupal.settings.YOURMODULE.testvarの値にアクセスできます。

alert(Drupal.settings.YOURMODULE.testvar);

(コードサンプルで提案されているように)グローバル変数を直接使用することは、JavaScriptでは推奨されない方法です グローバル名前空間を整理する 。また、コードがページの読み込み時にトリガーされる場合は、 Managing JavaScript in Drupal 7 documention(ページ全体が読む価値があります)の「動作」セクションを確認してください。

67
Pierre Buyle

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

MODULENAME.jsでは、次のコードを使用します。

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

})(jQuery);

このようにして、PHP変数をJavaScriptに渡して使用できます。

17
Himanshu Pathak

Drupal 8の場合、drupal_add_js()は削除されました(Drupal 7ですでに非推奨になっています)= > 詳細については、こちらを参照してください

PHP情報をJavascriptに送信する方法は完全に記述されています @ 4k4の回答による が同様の質問に。

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

JavaScriptでは、次のように使用できます。

(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