Drupal 8 添加 javascript 并在带有自定义模块的挂钩中传递数据

Drupal 8 add javascript and pass data in a hook with custom module

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

需要添加到页面的javascript取决于配置设置。因此我无法使用本文中提到的库添加它:Adding assets to Drupal module.

我首先使用块实现了它。我使用 Twig 模板将 PHP 中的配置变量传递给 twig 文件,并且在 twig 文件中,我有一个标签来根据配置变量添加 javascript。参考Using twig templates

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

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

我是 Drupal 开发新手。非常感谢您对此的任何帮助。

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

hook_page_attachments中使用:

$attachments['#attached']['drupalSettings']['myvar'] = $myVariable;

然后在你的js中(我假设你已经知道how to attach js library):

(function ($, Drupal, drupalSettings) {

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

})(jQuery, Drupal, drupalSettings);

有关更多示例,请参阅 nice Acquia tutorial