You are here

高级动作(3)

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

老葛的Drupal培训班 Think in Drupal

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

3-4.动作“嘟嘟多次”的动作配置表单
 
    Drupal向动作配置表单添加了一个描述字段。该字段的值是可编辑的,它将用来替代我们在action_info钩子中定义的默认描述。这是有意义的,因为我们可以创建一个高级动作用来嘟嘟两次并将其描述为“嘟嘟两次”,然后创建另一个用来嘟嘟五次并将其描述为“嘟嘟五次”。这样,在将动作分配给一个触发器时,我们就指出了这两个高级动作之间的区别。这样,高级动作的描述对于管理员来说就是很有意义的。
 
提示 这两个动作,“嘟嘟两次”和“嘟嘟五次”,可以看作是“嘟嘟多次”动作的实例。
 
    验证函数和Drupal中其它的表单验证函数一样(关于表单验证的更多详细,请参看第10章)。在这里,我们对用户的输入作了检查,以确保用户输入的是一个数字并且该数字不是特别大。
 
    提交函数的返回值是特定于动作配置表单的。它应该是一个数组,其中以我们关心的字段为键。这个数组中的值在动作运行时可供动作使用。描述是由系统自动处理的,所以我们只需要返回我们提供的字段就可以了,在这里也就是,嘟嘟的次数。
 
    最后,该编写高级动作本身了:
/**
* Configurable action. Beeps a specified number of times.
*/
function beep_multiple_beep_action($object, $context) {
    for ($i = 1; $i < $context['beeps']; $i++) {
        beep_beep();
    }
}
    你会注意到这个动作有两个参数,$object和$context。而我们前面所写的简单动作中,就没有带参数,二者在这一点上有点不同。
 
注意 简单动作也可以和高级动作一样,带有参数。由于PHP会忽略掉传递给函数但是没有出现在函数签名中的参数,如果我们需要了解当前的上下文信息,那么可以简单的将我们的简单动作的函数签名从beep_beep_action()改为beep_beep_action($object, $context)。所有的动作都可以使用$object和$context参数。
 

Drupal版本:

评论

thomasfan 的头像

/**
* Configurable action. Beeps a specified number of times.
*/
function beep_multiple_beep_action($object, $context) {
    for ($i = 1; $i < $context['beeps']; $i++) {
        beep_beep();
    }
}
 
修改为
 
/**
* Configurable action. Beeps a specified number of times.
*/
function beep_multiple_beep_action($object, $context) {
    for ($i = 0; $i < $context['beeps']; $i++) {
        beep_beep();
    }
}