跳转到主要内容

和“
Drupal8
”有关的内容:

思考:

能否将渲染后的结果直接保存在渲染前Cid下呢?为什么?
如果这样做,那么在系统其它地方要对这份缓存进行操作时,那么就需要知道它渲染前的Cid,这可能是个问题
缓存API的一般原则是:被缓存的数据对象自带缓存属性数据,可以从渲染后的渲染数组自身计算出对应的缓存id…

drupal使用渲染占位符机制的目的是为了提高系统性能,具体来讲就是提高缓存利用率和效率

具体解决以下问题:
1:有时候页面是一模一样的,仅仅某一元素不一样,比如一个页面仅显示的用户名不一样,如果有一万的用户岂不是要在缓存中保存一万份?这是不划算的,也不合理,这种现象叫做上下文基数过大
2:…

总结注意:

占位内容由回调产生,所以运用占位符机制时,#lazy_builder必须存在
设置#lazy_builder时如果存在#create_placeholder其值为false,将不会产生占位符,而是直接渲染,这常用于根渲染
#…

下面来看看drupal具体是怎么实现占位符机制的:

要使用占位符机制的内容都是缓存不划算的,在正常的渲染流程中将对这部分内容的渲染独立出来,在最后进行
为此系统给渲染数组定义了一个叫做延迟构建的键名:$elements['#lazy_builder'],它的值是一个只有两个元素的数组…

模块处理器:

模块处理器是容器中的一个服务,服务名为“module_handler”,在任何地方均可以通过\Drupal::moduleHandler()得到,它负责保存系统开启的模块信息、加载模块的函数、执行钩子等,在系统中非常多的地方都用到了它,可以说它是系统和模块、模块和模块之间的重要桥梁之一…

hook_info.bin:钩子信息函数返回的合并结果,键名为钩子名,键值为一个数组,group代表该钩子实现还可以存放在$module.$group.inc文件中

Array ( [token_info] =>…
模块怎么定义一个钩子名呢?

比如模块名叫“yunke”,要定义一个钩子(名)叫做“sendMail”那么在模块的主目录中建立一个名为“yunke.api.php”的文件,里面定义一个样板函数叫做:hook_sendMail(...),加上注释,说明在yunke这个模块中怎么运用这个钩子的,…

附件:列出默认安装中钩子的实现

在缓存中保存了钩子的默认实现和钩子信息:
module_implements.bin :钩子的实现信息 键名为钩子名,键值为一个数组,该数组键名为实现了这个钩子的模块名,对应值为位置$group信息,如果没有$group则为false…

钩子:

如果是开发新手可能对这个慨念陌生而好奇,许多工作多年的工程师可能对它也缺乏深度理解,不止是在php中,它其实是软件工程中的重要慨念,什么意思呢?为什么要叫做钩子?既然叫做钩子直觉的就会联想到钩什么?怎么钩?简单而直接的回答就是在软件运行的某时刻去钩起一段代码来执行,这个“钩起”也可以称为调用…

函数放置:

要进行drupal开发,开发者首要关心的可能就是函数库的放置,他们应该放在哪个文件里面呢?
通常我们是以模块的方式向drupal系统添加文件,所以首先可以将函数放置在模块主目录下的“模块名.module”文件中,该文件会被系统在容器建立后被自动加载