DRUPAL8模块开发 - DRUPAL8注册LAYOUTS(二)

翻译者:长风Drupal开发: Drupal8 theme注册模板文件

原文链接:https://www.drupal.org/docs/8/api/layout-api/how-to-register-layouts

Drupal8 theme注册模板文件

在上一个章节中,我们指定了template 关键字,使用theme系统自动注册了layout。
在Drupal8中,也可以使用指定特殊的theme钩子(也就是我们说的使用hoo_theme()注册)。如果你要使用同样的模板渲染多个layouts,这是非常有用的 。
要达到这个目标,你第一步是使用hook_theme()注册模板,如果你想使用hook_theme()定义你的主题钩子advanced_layout_1,你需要复制*.module(如果是drupal8模块)或者*.theme中(如果是Drupal8主题),

// Replace "MY_MODULE_OR_THEME" with the machine name of your module or theme.
function MY_MODULE_OR_THEME_theme() {
return [
'advanced_layout_1' => [
'template' => 'templates/advanced-layout-1',
// layout_plugin expects the theme hook to be declared with this:
'render element' => 'content',
],
];
}

在Drupal8 的*.layouts.yml文件中,不要使用template,而是使用你在模块或者主题中指定的机器名字"theme"
advanced_layout_1:
label: Advanced Layout 1
category: My Layouts
theme: advanced_layout_1
regions:
main:
label: Main content
在Drupal中注册library 和使用library 
大多数模板文件有特有的必需加载的CSS,为了达到这个,你第一步是注册library ,注册library 是使用*.libraries.yml文件,下面有一个例子。

advanced-layout-library:
version: 1.x
css:
theme:
css/advanced-layout-library.css: {}
js:
js/advanced-layout-library.js: {}
dependencies:
- core/jquery

在你的*.layouts.yml文件中,在library中指定你的library的机器名字。
例如,如果你的library的机器名字是 "advanced-layout-library",在你的 *.layouts.yml 应该这样写:

advanced_layout_2:
label: Advanced Layout 2
category: My Layouts
template: templates/advanced-layout-2
# Replace "MY_MODULE_OR_THEME" with the machine name of your module or theme.
library: MY_MODULE_OR_THEME/advanced-layout-library
regions:
main:
label: Main content