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


37

誰かが私を助けてくれることを願っています。問題は次のとおりです。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が分離されている場合、同じことをする方法ですか?


2
盲目的に変数をJavascriptにエコーアウトしないでください。Javascriptメタ文字(特に単一引用符)がある場合、構文エラーが発生します。やるvar myVar = <?php echo json_encode($testvar) ?>;かかわらず、PHPのVARのデータ型/コンテンツの、あなたのための任意のそのような問題の世話をするであろう。

回答:


65

あなたの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では推奨されません。また、ページの読み込み時にコードがトリガーされる場合は、Drupal 7ドキュメントのJavaScriptの管理の「動作」セクションを確認してください(ページ全体を読む価値があります)。


17

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に渡して使用できます。


関数は何をし、いつトリガーされますか?Drupal.settings.YOURMODULE.testvarを直接使用しないのはなぜですか?
信じられないほどの

5

以下のためのDrupal 8drupal_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);

*.libraries.yml定義する依存関係もあるべきであることに言及する価値があり- core/drupalSettingsます。
レイマンクス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.