【翻译】如何在drupal8的主题里面添加一个区域

原文链接:

https://www.drupal.org/docs/8/theming-drupal-8/adding-regions-to-a-theme

在drupal8的主题里面添加区域,以下两点是必须的:

1. 在THEMENAME.info.yml文件里面添加区域元数据
2. 修改page.html.twig文件并且打印出新的区域

注意:如果你在主题里面声明了任何的区域,甚至是一个,那么drupal会认为你定义了所有你需要使用的区域,因此所有默认的区域都不会被提供了。

如果你编辑了THEMENAME.info.yml,在不存在的区域(因为你没定义它们)里面的任何block将被禁用,并且如果你使用drupal cr清除缓存的时候,你将会得到下面的信息:

The block themename_breadcrumbs was assigned to the invalid region breadcrumb and has been disabled.

如果你访问/admin/structure/block这个链接,所有disabled的区块都会被列出在最上面显示“disabled”字样的指示器下面。你能够拖动或者使用区块下拉来重新设置区块,或者移除你不在使用到的区块。

确保你保存了page_top和page_bottom这两个区域 ,这些是隐藏的区域,用来标记页面的最顶层和最底层,例如分析代码或者管理工具条。你不需要在THEMENAME.info.yml文件里面列出他们,只需要确保在你的html.html.twig文件里面这两个区域没有被移除。模块获取会依赖他们的存在。

在Info文件添加区域

首先在THEMENAME.info.yml文件里面声明区域。所有的区域都是被定义在regions的关键字下面,就像下面这样:

regions:
  header: 'Header'
  content: 'Content'
  footer: 'Footer'

区域的key必须是字母,数字或者下划线,并且要用字母开头。这个key是机器名,你需要在代码里面使用的,这个值是在区块的管理界面能够被人看到的区域信息。

在模板文件添加区域代码

为了能在区域里面显示内容,你需要确保添加的region同样被添加到了page.html.twig文件里面。区域将会以Twig变量的方式被使用,这个变量对应你在THEMENAME.info.yml里面定义区域的时候使用的key。例如以下区域声明代码:

header: 'Header'

将会变成:

{{ page.header }}

这些行为和其他的twig变量一样,可以按照你的使用场景,被包含在任何的标签里面。

(默认隐藏区域的语法不同,参考下面)

默认区域

查看默认区域的列表,可以参考page.html.twig documentation

1. page.header
2. page.primary_menu
3. page.secondary_menu
4. page.highlighted
5. page.help (dynamic help text, mostly for admin pages)
6. page.content (main content of current page)
7. page.sidebar_first
8. page.sidebar_second
9. page.footer
10. page.breadcrumb

f your theme doesn't declare any regions Drupal will assume this set of defaults. These regions correspond with what the default 如果你的主题没有声明任何区域,drupal将会使用默认的一套,对应以下默认的文件使用到的。

core/modules/system/templates/page.html.twig

同样两个隐藏的区域page_top和page_bottom不需要声明,如果你重写默认的区域,但是{{ page_top }}和{{ page_bottom }}这两个tiwg变量需要被包含在html.html.twig模板文件里面。