云客Drupal源码分析之主题初始化器

2024-06-09 08:18

本文主要是介绍云客Drupal源码分析之主题初始化器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

主题初始化器:
服务id:theme.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:库继承,已经合并了所有基主题的定义,是一个数组值,键名为要扩展的库名(含扩展名前缀加“/”),键值为一个数组,每个元素为要加入的库名(含扩展名前缀加“/”)


补充说明:
1、bug:在目前8.5版本的实现中库覆写的处理顺序不正确,在主题继承链中,正确的覆写顺序应该是:
根基主题 >…(基主题) > 直接基主题 > 最终的活动主题
她们的优先级越靠后越大,但是很遗憾目前的执行顺序是:
直接基主题 > …(基主题) > 根基主题 > 最终的活动主题

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

 

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

 

 

 

 

 

这篇关于云客Drupal源码分析之主题初始化器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044647

相关文章

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很