web-dev-qa-db-ja.com

drupal 8ブロックでjsにphp変数を送信します

カスタムブロック内のjsファイルattach_library()を添付しようとしています。

ただし、ブロック経由でライブラリを追加することも、ライブラリを追加することもできません。 attach_library()はdrupal_add_jsのような変数を受け入れません。

A)に関するアイデア:block :: build()関数でphp変数を送信する方法、およびtwigテンプレートの代わりにbuild()を介してライブラリをアタッチする方法?

2
Potney Switters

これは、ライブラリをブロックプラグインのレンダー配列にアタッチし、php変数をjsに送信する方法のドキュメントからです。

ブロックプラグインのレンダー配列へのアタッチ

ライブラリをレンダー配列にアタッチする別の例を示します。モジュールでブロックプラグインを構築している場合は、ライブラリをクラスのbuild()関数でレンダー配列にアタッチして、BlockBaseクラスを拡張できます(=以降) Drupal 8ベータ6)。

return array(
      '#theme' => 'your_module_theme_id',
      '#someVariable' => $some_variable,
      '#attached' => array(
        'library' =>  array(
          'your_module/library_name'
        ),
      ),
    );

構成可能なJavaScriptのアタッチ

場合によっては、計算されたPHP情報に依存するページにJavaScriptを追加することができます。

この場合、JavaScriptファイルを作成し、以前と同じようにライブラリを定義してアタッチしますが、JavaScript設定をアタッチし、そのJavaScriptファイルにdrupalSettings(Drupal 7のDrupalの後続.settings)ただし、drupalSettingsをJavaScriptファイルで使用できるようにするには、jQueryを使用可能にするために行ったのと同じ作業を行う必要があります。つまり、依存関係を宣言する必要があります。

したがって、次のようになります。

cuddly-slider:
  version: 1.x
  js:
    js/cuddly-slider.js: {}
  dependencies:
    - core/jquery
    - core/drupalSettings

そして

$build['#attached']['library'][] = 'fluffiness/cuddly-slider';
$build['#attached']['drupalSettings']['fluffiness']['cuddlySlider']['foo'] = 'bar';

https://www.drupal.org/developing/api/8/assets

4
4k4