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をフォームに埋め込む方法は何ですか?
何を目指しているのかわかりません。
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);
この助けを願っています!