web-dev-qa-db-ja.com

モジュールごとにフォームにJavaScriptを追加する

drupal 8.でモジュールを書いています。そのフォームをロードするときにJavaScriptを追加したいと思います。

function ajax_example_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
 $form['#attached']['library'][] = array('ajax_example', 'ajax_example.sync_script');
}

そして私はモジュールライブラリのymlファイルで以下を定義しました

sync_script:
  version: 1.x
  js:
    js/test.js: {}

jsが埋め込まれていないようです。そして、私はjsをモジュールのルートディレクトリにあるjsと呼ばれるフォルダーに入れました。

drupal 8がJavaScriptをフォームに埋め込む方法は何ですか?

5
John Chan

何を目指しているのかわかりません。

hook_form_alter()javascriptを使用するのは良くないと私は思うので、見ようとするすべてのフォームがそのJavaScriptコードを呼び出します。

しかし...あなたの問題に戻って、

hook_form_alter()関数は、モジュールフォルダーのルートの下にあるmodule_name.moduleファイルで使用する必要があると思います:modules/custom/module_name/module_name。 moduleルーティング、情報などと並んで.

。moduleファイルをビルドした後、module_name.libraries.ymlファイルをビルドする必要があります(まだビルドされていない場合)。ここで、ルーティング要件を記述します。例:

<route_name>:
  version: 1.x
  js:
    js/<your_javascript_file>.js: {}
  dependencies:
    - core/jquery
    - core/drupalSettings

。moduleファイルに戻り、hook_form_alterを実装すると、コードは次のようになります。

/**
 * Implements hook_form_alter().
 */

function <module_name>_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id){

    $form['#attached']['library'][] = '<module_name>/<route_name>';
    $form['#attached']['drupalSettings']['<module_name>']['<route_name>'] ['variable'] = 'value';

    return $form;

}

確認するには、console.log your PHP variable in your_javascript_fileそれを表示するには、例:

(function($){
    console.log(drupalSettings.<module_name>.<route_name>.variable); // value
})(jQuery);

この助けを願っています!

22
jelhouss