如何使主题需要Jquery(对于匿名用户)?


7

我正在为D8创建一个名为'herchel'的主题。我试图让这个主题在所有页面上都需要jquery(D8默认不为匿名用户加载Jquery)

翻阅除了核心主题之外我可以找到的少量文档,我创建了一个名为herchel.libraries.yml的文件。

我尝试了以下方法...所有方法都没有运气:

drupal.herchel:
version: VERSION
  dependencies:
    - core/jquery

--

drupal:
version: VERSION
  dependencies:
    - core/jquery

--

herchel:
version: VERSION
  dependencies:
    - core/jquery

有人对我需要添加的内容有任何想法吗?


第三个是对的,我认为问题只是空格-尝试缩进version以匹配的行dependencies
Clive

Answers:


11

我想将我的贡献主题之一升级到Drupal 8,因为我想为匿名用户提供jquery.once。这是我所做的,效果很好:

herchel.libraries.yml中

herchel-corescripts:
  version: VERSION
  js:
    js/scripts.js: {}
  dependencies:
    - core/jquery
    - core/drupal.ajax
    - core/drupal
    - core/drupalSettings
    - core/jquery.once

然后在主题的herchel.theme文件中。

function herchel_preprocess_page(&$vars, $hook) {
  // Render the library as laid out in herchel.libraries.yml
  $libraries['#attached']['library'][] = 'herchel/herchel-corescripts';
  \Drupal::service('renderer')->renderRoot($libraries);
}

还要注意缩进YML代码。尽管尚未对其进行充分的记录,但是您可以查看此问题及其更改日志。

用* .libraries.yml文件替换hook_library_info()

请注意,您还可以在上面的代码中看到理论主题的“ scripts.js”文件,但可能不需要它。在我的主题中,这就是使用jquery调用自定义代码的原因。

对于YML位,此代码也可能是一个很好的参考。请注意,两种情况version都与处于同一级别dependencies

我还列出了我在D8升级中遇到的Drupal 8问题

更新:

我已经修复了代码,我们遇到了这个问题:用提供者命名的字符串替换#attached库数组值

请注意:

 $libraries['#attached']['library'][] = array('herchel', 'herchel-corescripts');

与这个

$libraries['#attached']['library'][] = 'herchel/herchel-corescripts';

我进行了测试,错误消失了。:)


丹尼,你太棒了!但是,我遇到了一些PHP错误。警告:explode()期望参数2为字符串,在_drupal_add_library()中给出的数组(core \ includes \ common.inc的第2676行)。警告:explode()期望参数2为字符串,在drupal_get_library()中给出的数组(core \ includes \ common.inc的第2741行)。无论herchel.libraries.yml文件中存在什么,都会出现这些错误。我试过一点运气都没有。我也想你的代码免费提供,但是这似乎是之前发行8507583是COMMITED
mherchel

1
$ page ['#attached'] ['library'] [] ='libraryprovider / libraryname';

迈克,Gratis中的新代码仅在开发版本中(drupalcode.org/project/gratis.git/tree/refs/heads/8.x-1.x),我对其进行了测试,并且可以与最新的Alpha版本一起使用D8。今天,我几乎要开始一个项目了,但这个周末我可能会有所帮助。您正在使用什么版本的D8?
Danny Englander 2014年

不使用预处理功能怎么能做到这一点?
itdarrylnorris 2015年

11

在您的主题中创建库文件herchel.libraries.yml。放入此文件:

libname:
  version: 1.x
  js:
    js/scripts.js: {}
  css:
    theme:
      css/styles.css: {}
  dependencies:
    - core/jquery

herchel.info.yml认沽:

libraries:
  - herchel/libname

有一个问题,关于这一点,它是固定在塞格德的Drupal开发者日。
Dragan Eror 2014年

我已经更新并测试了答案中的代码,这很可能是我们根据错误消息遇到的问题。drupal.org/node/2203407
Danny Englander 2014年

也许这也将有所帮助...有关库实现的文档页面drupal.org/node/2216195
Dragan Eror 2014年

0

也许您在“依赖项”之前添加了空格。

这是真的:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
  dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings

例如,这是错误的:

google-maps:
  version: VERSION
  js:
    vendor/gmap3.js: {cope: footer}
    //maps.google.com/maps/api/js?key=000000: { type: external, cope: footer}
    dependencies:
      - core/jquery
      - core/drupal
      - core/drupalSettings
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.