You are here

直接使用actions_do()来调用一个动作

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

触发器模块仅是调用动作的一种方式。你可能想写一个单独的模块,它需要自己负责动作的调用和参数的准备。如果是这样的话,那么推荐使用actions_do()来调用动作。函数的签名如下:

actions_do($action_ids, &$object, $context = array(), $a1 = NULL, $a2 = NULL)
 
让我们学习一下里面的参数:
• $action_ids: 要执行的动作,既可以是单个动作ID,也可以是一个包含动作ID的数组。
• $object: 该动作要作用的对象,如果存在的话。
• $context:一个关联数组,里面包含了动作可能想要使用的信息,对于高级动作里面会包含配置参数。
• $a1 and $a2:可选的额外参数,如果传递给了actions_do(),那么也将会传递给该动作。
 
    下面是我们如何使用actions_do()来调用我们的简单动作“嘟嘟”的:
$object = NULL; // $object is a required parameter but unused in this case
actions_do('beep_beep_action', $object);
 
    而下面则是我们如何调用高级动作“嘟嘟多次”的:
$object = NULL;
actions_do(2, $object);
 
    或者,我们还可以绕过获取存储的参数这一步,从而这样调用它:
$object = NULL;
$context['beeps'] = 5;
actions_do('beep_multiple_beep_action', $object, $context);
 
注意 一些中坚的PHP开发者可能会疑惑,“有必要使用动作么?为什么不直接调用该函数,或者仅仅实现一个钩子?为什么需要把参数隐藏在上下文中,直接使用传统的PHP参数不也能实现吗?”答案是,通过编写一个带有非常一般的函数签名的动作,那么就可以实现代码的重用,这样就方便了站点管理员。站点管理员,可能并不懂得PHP,如果他想在添加节点时实现发送电子邮件的功能,那么它就不需要雇佣一个PHP程序员了。他只需要简单的将动作“发送电子邮件”分配到触发器“在保存新文章之后”上,就能实现想要的功能了,这样就不再需要麻烦他人了。
 老葛的Drupal培训班 Think in Drupal

Drupal版本: