在Drupal 8中附加或包含一个js文件

时间:2016-02-25 09:32:11

标签: javascript html css drupal

$description = $this->t('See the <a onclick="drup()">drupal</a> for options.');    

在上面的代码中,drup()是来自js文件drupaljs.js的javascript函数。如何在drupal 8模块中包含或附加js文件。

以下是代码的目录层次结构: drupal的/型芯/模块/ config_translation / SRC / FormElement / func.module

1 个答案:

答案 0 :(得分:1)

与Drupal 7相比,Drupal 8只添加了页面上所需的javascript。这意味着例如,jQuery不再自动加载到所有页面上。

要向页面添加自定义javascript,现在有三个不同的步骤:

  1. 将CSS或JS保存到文件中。
  2. 定义一个&#34;库&#34;,它可以包含CSS和JS文件。
  3. &#34;附加&#34;将库添加到钩子中的渲染数组中。
  4. 要定义库,您必须在模块中创建* .librairies.yml,其中*是模块的名称。那么你应该有类似的东西:

    cuddly-slider:
    version: 1.x
      css:
        theme:
          css/cuddly-slider.css: {}
      js:
        js/cuddly-slider.js: {}
      dependencies:
        - core/jquery
    

    正如我所说,jquery并不总是在每个页面上加载,这意味着如果你需要使用jQuery,你必须告诉Drupal你的库需要它,并带有依赖项键。

    根据您需要加载的资产,您需要以不同的方式附加相应的资产库。 您可以使用多个挂钩来加载库。如果您希望在某些页面上加载它,可以使用hook_page_attachments()。

    <?php
    function contextual_page_attachments(array &$page) {
      if (!\Drupal::currentUser()->hasPermission('access contextual links')) {
        return;
      }
    
      $page['#attached']['library'][] = 'contextual/drupal.contextual-links';
    }
    ?>
    

    将其附加到树枝模板:

    {{ attach_library('contextual/drupal.contextual-links') }}
    

    以下是有关如何以编程方式附加js文件的完整文档:https://www.drupal.org/developing/api/8/assets