web-dev-qa-db-ja.com

JavaScriptに変数を渡すにはどうすればよいですか?

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変数をdrupal javascriptファイルに渡して、変数を使用することができます:)

上記をDrupal 8にどのように実装できますか?

6
harshal

drupal_add_js(array('MODULENAME' => array('testvar' => $testVariable)), array('type' => 'setting'));の代わりに_$build['#attached']['drupalSettings']['testvar'] = $testVariable;_を使用します。 _$build_を、設定が関連付けられているフォームまたはレンダリング配列を含む変数に置き換えます。フォームビルダーまたはhook_form_alter()では、_$form_になります。

次に、ページに添付するJavaScriptコードをライブラリとして定義する必要があります。これは、JavaScriptとCSSをページまたはフォームに添付する唯一の方法です。
スタイルシート(CSS)とJavaScript(JS)をDrupal 8モジュール に追加するで説明されているので、ここでは繰り返さない。Iライブラリは少なくとも2つの依存関係を宣言する必要があることに注意してください。

  • core/jquery(JavaScriptコードがjQueryを使用する場合)
  • javaScriptコードはDrupal設定を使用するため、core/drupalSettings
15
kiamlaluno

これを行う別の方法( JS-standards で言及されている)は次のようになります。

$element['#attached']['js'][] = array(
  'data' => array('myModule' => array('basePath' => base_path())), 
  'type' => 'setting',
);

この変数は、JS側から次のように参照されます。

Drupal.settings.myModule.basePath;
0
Top-Master