检查上下文

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 11:53

将钩子和操作放在上下文中,这一点非常有用。我们举个例子,动作“发送电子邮件”就大量的利用了这一点。这个动作的类型为system,它可以被分配给许多不同的触发器。

Drupal版本:

建立上下文

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 11:52

由于我们已经分配了动作,所以当一个新评论被发布时,当前用户将被阻止。让我们仔细的看一下,这里都发生了什么。我们已经知道,Drupal是通过触发钩子来向模块通知特定事件的。在这里触发的就是评论钩子。由于当前是一个新评论正被添加进来,所以当前的特定操作就是insert操作。触发器模块实现了评论钩子。在这个钩子内部,它对数据库进行查询,来获取分配到这个特定触发器上的所有动作。数据库就会将我们分配的动作“阻止当前用户”返回给该钩子。现在,触发器模块就可以执行该动作了,它符合标准的动作函数签名example_action($object, $context)。

Drupal版本:

在动作中使用上下文

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 11:45

老葛的Drupal培训班 Think in Drupal

我们在前面已经看到,动作的函数签名的一般形式为example_action($object,$context)。下面让我们学习一下这些参数的具体含义。

• $object: 许多动作都是作用于Drupal的一个内置对象的:节点、用户、分类术语、等等。当trigger.module执行动作时,被作用的对象就会通过参数$object传递给动作。例如,如果一个动作被设置为在新节点创建时执行的话,那么$object参数包含的就是节点对象。
• $context: 一个动作可以在许多不同的上下文中被调用。通过在hook_action_info()中定义hooks键,动作就可以声明它们所支持的触发器。但是支持多个触发器的动作,需要使用一些方式来判定它们被执行时所处的上下文。这样,根据上下文的不同,动作会做出不同的反应。
 

Drupal版本:

高级动作(3)

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 11:44

老葛的Drupal培训班 Think in Drupal

第一个函数向Drupal描述了表单。我们只定义了一个文本输入框字段,这样管理员就可以输入嘟嘟的次数了。当管理员选择添加一个高级动作“嘟嘟多次”时,如图3-3所示,Drupal将会使用我们的表单字段来呈现一个完整的动作配置表单,如图3-4所示。

Drupal版本:

高级动作(2)

g089h515r806 的头像
Submitted by g089h515r806 on 星期五, 2009-07-31 11:41

让我们快速的检查一下,我们的实现是否正确,导航到“管理➤站点配置➤动作”。不错,动作出现在了高级动作的下拉选择框中了,如图3-3所示。

Drupal版本:

页面

Subscribe to Think in Drupal RSS