You are here

你的第一个动作

如果将我们的嘟嘟函数转化为一个完整的动作,那么我们需要做哪些工作呢?这有两个步骤:

1. 通知Drupal该动作所支持的触发器。
2. 创建你自己的动作函数。
 
    第一步就是实现hook_action_info()。下面给出beep模块中该钩子的实现:
/**
* 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('view', 'insert', 'update', 'delete'),
            'comment' => array('view', 'insert', 'update', 'delete'),
            'user' => array('view', 'insert', 'update', 'delete', 'login'),
            'taxonomy' => array('insert', 'update', 'delete'),
        ),
    );
    return $info;
}
 
    该函数的名字为beep_action_info(),在这里,和其它的钩子实现一样,我们使用了:模块名(beep)+钩子名(action_info)。我们将返回一个数组,数组中的一个条目就对应我们的模块中的一个动作。由于我们只编写了一个动作,所以只有一个条目,它的键就是执行动作的函数的名字:beep_beep_action()。为了在阅读代码时,方便的识别哪个函数是个动作,我们在我们的beep_beep()函数的名字后面追加了_action,这样就成了beep_beep_action()。
 
让我们仔细的看一下数组中的键:
• type: 这是你编写的动作的类型。Drupal使用该信息,将动作归类到触发器分配界面的下拉选择框中。可能的类型包括system, node, user, comment, 和taxonomy。在判定你编写的动作的类型时,你需要好好的想一想,“这个动作作用于什么对象呢?”(如果答案不确定,或者是“各种不同的对象!”,那么可以使用system类型)。
• description:这是该动作的描述性名字,它显示在触发器分配界面的下拉选择框中。
• configurable:这个是用来判定该动作是否带有参数的。
• hooks: 在这个钩子数组中,每个条目都是用来列举该动作所支持的操作的。Drupal使用这一信息,来判定该动作在触发器分配界面中的位置。
 
    我们已经向Drupal描述了我们的动作,所以让我们继续:
/**
* Simulate a beep. A Drupal action.
*/
function beep_beep_action() {
    beep_beep();
}
 
    这也不是太难吧,不是么?在继续往下以前,由于我们将使用触发器和动作来取代直接的钩子实现,所以让我们回过头来将beep_user()和beep_nodeapi()删除。
 
老葛的Drupal培训班 Think in Drupal

Drupal版本: