1

フォーム API の「#markup」に問題があります。

Drupal 7 では、次のような「#markup」フォーム要素を使用できます。

<?php
$form['test'] = array(
    '#type' => 'markup',
    '#markup' => '<div><script src="http://localhost/drupal7/sites/all/libraries/test.js"></script></div>',
  );
?>
//Here is my custom test.js
(function($) {
    Drupal.behaviors.test = {
        attach: function(context, settings) {
            console.log('testttt');
            document.write('*Hello, there!*');
        }
    };
})(jQuery);

上記のコードは、フォームがレンダリングされるときに「 Hello, there! 」と出力します。

Drupal 8 では以下のコードを使用していますが、何も出力しません。

<?php
$form['test'] = array(
      '#markup' => '<div><script src="http://localhost/project8/sites/all/libraries/test.js"></script></div>',
    );
?>

では、Drupal 7 ですでに動作している Drupal 8 でこの機能を実装するにはどうすればよいでしょうか。スクリプト タグの下には、ローカル スクリプトまたは外部スクリプトを指定できます。助けてください...

ありがとう

4

2 に答える 2

3

Drupal 8 では、「#markup」を使用して JavaScript ファイルを添付する方法は提案されていません。カスタム モジュールまたはテーマでライブラリを定義し、そのライブラリをフォームに添付できます。ライブラリには、複数の js および (または) css ファイルを含めることができます。

モジュールでライブラリを定義するには:

モジュール名を「my_module」とすると、モジュール フォルダーに「my_module.libraries.yml」というファイルを作成し、js ファイルと css ファイルを次のように指定します。

form-script:
  version: 1.x
  css:
    theme:
      css/form.css: {}
  js:
    js/form.js: {}
    js/form-ajax.js: {}
  dependencies:
    - core/jquery

このライブラリをフォームに添付するには:

$form['#attached']['library'][] = 'my_module/form-script';

次に、キャッシュをクリアします。js ファイルと css ファイルは、libraries.yml ファイルで説明したのと同じ順序で読み込まれます。同じ「my_module.libraries.yml」ファイルで複数のライブラリを定義できます。

于 2016-08-11T12:58:55.397 に答える