Drupal 8添加javascript并使用自定义模块在钩子中传递数据

Aks*_*hot 1 hook drupal drupal-hooks drupal-8 drupal-modules

我正在使用Drupal 8构建自定义模块.该模块的一个要求是它根据配置设置设置javascript文件,模块用户在模块配置中设置.

需要添加到页面的javascript取决于配置设置.因此,我无法使用本文中提到的库添加它:向Drupal模块添加资源.

我首先用块实现它.我使用Twig模板将PHP中的配置变量传递给twig文件,在twig文件中,我有一个标签可以根据配置变量添加javascript.请参阅使用树枝模板.

这种方法的问题是用户需要在页面上添加块,并且该块上没有面向UI的元素.我也觉得很乱.

有没有更简洁的方法来添加我的javascript使用钩子并传递变量?我环顾四周,发现了hook_installhook_page_attachments.所以我可以添加Javascript,但不知道如何将任何php变量传递给它.

我是Drupal开发的新手.任何帮助都非常感谢.

TL; DR我需要找到一种方法来使用Drupal钩子添加Javascript并将一些PHP变量传递给它.

Dmy*_*voy 6

hook_page_attachments中使用:

$attachments['#attached']['drupalSettings']['myvar'] = $myVariable;
Run Code Online (Sandbox Code Playgroud)

然后在你的js(我假设你已经知道如何附加js库):

(function ($, Drupal, drupalSettings) {

  Drupal.behaviors.my_custom_behavior = {
    attach: function (context, settings) {
      var strings = drupalSettings.myvar;
      ...
    }
  }

})(jQuery, Drupal, drupalSettings);
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请参阅精美的Acquia教程.