75. 主题初始化器

在主题处理器一节提到了主题扩展对象(\Drupal\Core\Extension\Extension),该对象包含了一个主题的全部信息,但仅仅是该主题的信息,在系统中许多地方实际使用的是更高层次的活动主题对象(见下),她包含前者所有信息,还处理库覆写、库继承等主题与主题间相互影响的内容,该对象就是在主题初始化器中产生的,同时主题初始化器还负责加载主题主扩展文件等工作。

 

主题初始化器:

服务idtheme.initialization

类:Drupal\Core\Theme\ThemeInitialization

用于系统协商确定要使用的主题后,获得ActiveTheme对象(见下)并加载主题扩展的主扩展文件(主题根目录下的THEME.theme文件)

作为默认模板引擎,文件core/themes/engines/twig/twig.engine总是被默认加载,不管我们是否使用twig模板引擎

 

活动主题对象ActiveTheme

类:\Drupal\Core\Theme\ActiveTheme

和扩展对象\Drupal\Core\Extension\Extension相比ActiveTheme对象是更高一级的信息储存对象,她包含了前者,用于主题管理器运行时获取主题的相关信息,默认缓存在以下位置:

\Drupal::cache('bootstrap')->get('theme.active_theme.' . $theme_name);

她的所有属性如下(能够提供的信息):

$name主题的机器名

$path主题相对于系统根目录的路径,如“core/themes/bartik”无前后缀“/

$engine使用的模板引擎,通常为“twig”,在drupal中可以同时使用其他模板引擎

$owner模板引擎的主扩展文件,值如“core/themes/engines/twig/twig.engine

$baseThemes主题继承链中基主题的ActiveTheme对象构成的数组,第一个元素为直接基主题,最后一个为祖宗基主题

$extension本主题的扩展对象\Drupal\Core\Extension\Extension

$styleSheetsRemove被移除掉的css文件数组,相对于系统根目录的全路径,包含文件名,无前缀“/

$libraries需要全局加载的库文件,已经包含所有基主题的声明

$regions本主题的分区定义,和基主题无关

$librariesOverride库覆写定义,已经包含所有基主题的声明,第一个元素为直接或最近基主题定义的覆写(以主题路径作为键名,键值是覆写定义数组),最后一个为本主题定义的覆写,倒数第二个为祖宗主题定义的覆写

$librariesExtend库继承,已经合并了所有基主题的定义,是一个数组值,键名为要扩展的库名(含扩展名前缀加“/”),键值为一个数组,每个元素为要加入的库名(含扩展名前缀加“/”)

 

 

补充说明:

1bug:在目前8.5版本的实现中库覆写的处理顺序不正确,在主题继承链中,正确的覆写顺序应该是:

根基主题 >…(基主题) > 直接基主题 > 最终的活动主题

她们的优先级越靠后越大,但是很遗憾目前的执行顺序是:

直接基主题 > …(基主题) > 根基主题 > 最终的活动主题

由于这样的覆写顺序导致基主题可以覆写子主题的库,这是不合理的,有待修复

 

 

本书共94小节:

评论 (写第一个评论)