作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
在模块中,通过使用一组区块相关的钩子,便可以定义区块了,而且一个模块可以定义多个区块。一旦区块定义好了以后,它就会显示在区块管理界面。另外,管理员可以通过后台管理界面,手动的创建自定义区块;当然,也可以使用views模块创建各种列表区块。在本节中,我们主要讨论,如何通过自定义模块的方式来创建区块。首先让我们了解一下区块的数据库表结构,如图所示。
区块的数据库表结构
每个区块的相关属性大都存储在表block里面,自定义区块的描述和内容信息存放在block_custom表中,与内容类型相关的可见性设置存放在block_node_type里面,而与角色相关的可见性设置则存放在block_role里面。我们先学习一下表block中的各种属性:
bid:这是每个区块的唯一标识ID。
module:这个字段存放的是定义区块的模块的名称。比如,用户登录区块是在用户模块中定义的,它在这里的module值就是user。对于管理员在“首页 » 管理 » 结构 » 区块”中创建的自定义区块,则被认为是由区块模块创建的,此时的module值就是block。
delta:由于一个模块可以在钩子hook_block_info中定义多个区块,所以delta存放了每个区块的键,它们在该模块的hook_block_info钩子实现中是唯一的,但对于整个站点的所有区块,则不一定是唯一的。delta可以是整数,也可以是字符串。
theme:一个区块可以用于多个主题。因此,Drupal需要存放启用了该区块的主题的名称。对于启用了该区块的每个主题,在这个数据库表中都有自己的对应记录。配置选项不能在主题之间共享。
status:它用来追踪区块是否被启用。1意味着启用,0意味着禁用。如果一个区块,没有为其指定一个区域,那么Drupal会将其状态设置为0.
weight:区块的重量,用来判定区块在区域中的相对位置。
region: 放置该区块的区域的名字,例如,footer(页脚)、header(页首)。
custom: 这是这个区块的“基于用户的可见性设置”里面的值。0意味着用户不能控制该区块的可见性;1意味着该区块默认是显示的,但是用户可以隐藏它;2意味着该区块默认是隐藏的,但是用户可以选择显示它。
visibility: 这个值属于“基于页面路径的可见性设置”,用来表示如何判定区块的可见性。0意味着区块将显示在除所列页面以外的所有页面;1意味着区块只能显示在下面的所列页面;2意味着,Drupal将通过执行一段由管理员定义的PHP代码,来判定区块的可见性。
pages: 该字段的内容依赖于visibility字段中的设置。如果visibility字段的值为0或1,那么该字段将包含一列Drupal路径。如果visibility字段的值为2,那么该字段将包含一段PHP代码,通过对其计算来判定是否需要显示区块。
title:这是区块的自定义标题。如果这个字段为空,那么将使用区块的默认标题(由区块所在的模块提供)。如果这个字段为<none>,那么该区块就不显示标题。其余情况,该字段的文本将用作区块的标题。
cache: 这个值用来判定Drupal是如何缓存该区块的。-2表示自定义缓存,从区块缓存系统的角度来看,它等价于不缓存;当标准区块缓存无效时,比如使用了节点访问控制时,此时又需要缓存,那么就可以使用这种方式。–1表示区块不被缓存。1表示基于角色缓存区块,如果没有声明缓存设置,那么这是Drupal区块的默认设置。2表示基于用户缓存区块。4表示基于页面缓存区块。8表示区块将被全局缓存,也就是说,不管是什么角色、什么用户、什么页面,缓存的方式都是一样的。