动作主要有两种类型:带有参数的动作和不带参数的动作。我们前面所写的“嘟嘟”动作就是不带参数的动作。当动作执行时,它嘟嘟一下,这就完事了。但是许多时候,动作可能需要更多一点的上下文。例如,一个“发送电子邮件”动作,需要知道将电子邮件的发收件人以及邮件的标题和正文。这种需要为其在配置表单中做些设定的动作,就是高级动作,也称为可配置动作。
简单的动作不带参数,也不需要配置表单,并且能够自动出现在触发器分配界面(访问“管理➤站点构建 ➤模块”以后)。如果你想告诉Drupal你的动作是一个高级动作的话,你需要进行以下步骤:在你模块的hook_action_info()实现中将configurable键设置为TRUE;提供一个表单用来配置该动作;提供一个可选的验证处理器和一个必须的提交处理器来处理配置表单。表3-3对简单动作和高级动作的区别进行了总结。
表3-3.简单和高级动作的不同之处的总结
简单动作 高级动作
参数 无* 必须的
配置表单 无 必须的
可用性 自动 需使用动作管理界面创建动作实例
hook_action_info() FALSE TRUE
中configure的值
* 如果需要的话,可以使用$object和$context参数。
让我们创建一个可以嘟嘟多次的高级动作。我们可以使用一个配置表单来指定该动作嘟嘟的次数。首先,我们需要告诉Drupal这个动作是可配置的。让我们在beep.module的action_info钩子实现中,为我们的新动作添加一个条目:
/**
* Implementation of hook_action_info().
*/
function beep_action_info() {
$info['beep_beep_action'] = array(
'type' => 'system',
'description' => t('Beep annoyingly'),
'configurable' => FALSE,
'hooks' => array(
'nodeapi' => array('delete'),
),
);
$info['beep_multiple_beep_action'] = array(
'type' => 'system',
'description' => t('Beep multiple times'),
'configurable' => TRUE,
'hooks' => array(
'any' => TRUE,
),
);
return $info;
}
老葛的Drupal培训班 Think in Drupal