我想将我的贡献主题之一升级到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';
我进行了测试,错误消失了。:)
version
以匹配的行dependencies