You are here

使用drupal区块钩子

老葛的Drupal培训班 Think in Drupal

在用代码创建区块时,我们在区块钩子hook_block()中处理所有的逻辑。通过这个钩子,你可以创建单个区块或者一组区块。任何模块都可以通过实现钩子hook_block()来创建区块。让我们看一下函数签名:
function hook_block($op = 'list', $delta = 0, $edit = array())
 
参数列表
    区块钩子中使用的参数将在下面讨论。
 
$op
    这一参数用于定义区块所经过的阶段。通过传递参数$op来定义一个操作阶段,这一模型在Drupal框架中是很常用的---例如hook_nodeapi()和hook_user()中都用到了这一模型。$op的可能值如下:
 
list:返回一个数组,里面包含了该模块定义的所有区块。数组的键就是delta(在本模块定义的所有区块中,它是唯一的标识符)。每个数据元素的值,还是一个数组,里面提供了区块的重要数据。list的可能值和默认值,如下所示:
 
    info:这个值是必须的。一个可翻译的字符串(例如,使用t()封装),为站点管理员提供了一个合适的区块描述。
 
    cache: 这个区块如何被缓存?可能的值有LOCK_NO_CACHE (不缓存区块), BLOCK_CACHE_PER_ROLE (为每个角色缓存区块),    BLOCK_CACHE_PER_USER (为每个角色缓存区块----站点用户多了最好不要用这种方式!), BLOCK_CACHE_PER_PAGE (为每个页面缓存区块), 和BLOCK_CACHE_GLOBAL (缓存一次区块,所有的都一样)。
 
    status:区块默认应该被启用吗----True 还是 FALSE?默认为FALSE。
 
    region:可能为区块设置的默认区域。当然,管理员可以将区块移到一个不同的区域中。只有当状态值为TRUE时,区域的值才会有效;如果区块未被启用,那么区域将被设置为None。
 
    weight:它控制着区块在它的区域内的放置次序。重量越小,位置越靠前,水平方向是靠左,垂直方向是靠上。重量越大,越靠后。默认值为0.
 
    pages:定义区块所在的默认页面。默认是一个空字符串。pages的值包含了通过换行分隔的Drupal路径。*为通配符。例如,路径blog为日志首页,而blog/*则为个人日志页面。<front>代表首页。
 
    custom:TRUE意味着这是一个自定义区块,而FALSE则意味着它是通过模块实现的区块。
 
    title:默认区块标题。
 
    configure:返回一个数组,里面包含了用于特定区块设置的表单字段定义。它与区块配置页面的表单合并在了一起,从而使你能够扩展区块的配置方式。如果你实现了这个操作,那么你还需要实现save操作 (参看下一项)。
 
    save:在配置表单提交时被调用。当你的模块可以保存你在configure操作中收集的自定义区块配置信息时,使用该操作。你想保存的数据包含在参数$edit中。它不需要返回值。
 
    view:区块正被显示。返回一个包含了区块标题和内容的数组。
 
$delta
    这是要返回的区块ID。你可以为$delta使用一个整数或者一个字符串。注意当参数$op为list时,因为delta是在list操作中定义的,所以$delta此时将被忽略。
 
$edit
    当$op为save时,$edit包含了从区块配置表单提交过来的表单数据。
 

Drupal版本:

评论

configure项之前的都是list项的子项;configure和之后的是和list并列的项,$op的子项;(Page 209);结构如下:

$op
    *list
        info
        cache
        status
        region
        weight
        pages
        custom
        title
    *configure
    *save
    *view
$delta
$edit