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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Drupal 8添加javascript并使用自定义模块在钩子中传递数据相关的知识,希望对你有一定的参考价值。

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

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

我首先用块实现它。我使用Twig模板将php中的配置变量传递给twig文件,在twig文件中,我有一个标签来添加基于配置变量的javascript。请参阅Using twig templates

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

有没有更简洁的方法来添加我的javascript使用钩子并传递变量?我环顾四周,找到了hook_installhook_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

以上是关于Drupal 8添加javascript并使用自定义模块在钩子中传递数据的主要内容,如果未能解决你的问题,请参考以下文章

游览结束后如何在 jourde 中添加自定义功能?

javascript Drupal 8 Waterwheel认证

Drupal 8 自定义块如何附加 JavaScript ?

Mailchimp 使用 php 和 drupal 8 将标签添加到列表中的现有成员

添加菜单链接Drupal 8

如何在Drupal 8菜单项中添加额外的字段。我想添加一个额外的图像字段