3

我试图在我正在构建的 Drupal 8 主题中包含一个自定义 javascript 文件来操作我的菜单。我按照 Drupal 8 主题指南中的说明进行操作,包括在我的 .info.yml 文件中:

#js libraries
libraries:
- dcf/base

并在我的 .libraries.yml 文件中定义它:

base:
version: 1.x
js:
    js/endscripts.js
dependencies:
    - core/drupal
    - core/underscore
    - core/backbone
    - core/jquery

最后创建一个带有钩子实现的 .theme 文件(我不是真正的 PHP 开发人员,所以我主要从指南中的示例中完成了复制/粘贴工作)

<?php

function dcf_page_alter(&$page) { 
  $page['#attached']['library'][] = 'dcf/base';
}

?>

我清除缓存,注销以查看未登录页面(管理视图有很多额外的脚本和它调用的 css 文件)并查看源代码以查看我的脚本是否正在加载。我在库中列出的所有依赖项都正在加载,但不是我的脚本本身。

在此处输入图像描述

脚本本身只是一个基本测试,应该使用 JQuery 隐藏我的主菜单,放入主题指南提到的“严格”格式是必需的。

(function () {
  "use strict";
  // Custom javascript
  $(document).ready(function() {
    $("#block-dcf-main-menu").hide();
  });
})();

我在这一点上不知所措。我的直觉是错误出在我的钩子实现中,因为我真的不了解 Drupal 的钩子系统,但据我所知,仍然可能只是他们还没有完成对 Drupal 8 的实现(我我这样做是为了测试 Drupal 8 为我的组织即将进行的网站重建,目前正在运行 Drupal 8.0.x-beta2,没有安装其他模块)

4

2 回答 2

4

我就是这样做的

my_theme.info

没有图书馆声明

my_theme.libraries.yml

my_theme:
  version: 1.0
  css:
    theme:
      css/my_theme.css: {}
  js:
    js/my_theme.js: {}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

my_theme.theme

/*
*
*    see doc to attach library more specifically
*
* */
function my_theme_page_attachments_alter(array &$attachments) {
    $attachments['#attached']['library'][] = 'my_theme/my_theme';    
}

/js/my_theme.js

 console.log('it works!');

/css/my_theme.css

 /*smthg radical happens*/
 body{
   display:none;
 }
于 2016-10-27T09:45:48.800 回答
0

答案,如 clive 的评论所示,是脚本末尾缺少的 {}。所以 mytheme.libraries.yml 中的脚本声明应该是
js: js/endscripts: {}

于 2017-05-04T15:45:04.197 回答