如何在Drupal 7中“打包”高级操作并设置触发器

时间:2012-02-23 15:27:52

标签: drupal drupal-7 drupal-modules

我在代码中创建了两个动作,一个是简单的,一个是高级的。

function userbeep_action_info() {
    return array(
        'userbeep_beep_action' => array(
            'type' => 'system',
            'label' => t('Beep annoyingly'),
            'configurable' => FALSE,
            'triggers' => array('node_view', 'node_insert', 'node_update', 'node_delete')
        ),
        'userbeep_multiple_beep_action' => array(
            'type' => 'system',
            'label' => t('Beep multiple times'),
            'configurable' => TRUE,
            'triggers' => array('node_view', 'node_insert', 'node_update', 'node_delete')
        )
    );
}

现在,简单操作(即不可配置的操作)将自动显示在“触发器”菜单中,但我需要在admin/config/system/actions中创建高级操作才能使用它。

我想做的是让我的模块自动创建高级操作。我可以通过两种方式看到它的工作原理:

1)在加载模块时,在.install文件中添加内容进行安装和卸载。

2)使用功能

打包这些设置

理想情况下,我想使用1)以编程方式执行此操作,但我也很想了解功能。我安装了模块但看不到明显的方法。

向前移动,是否还有办法使用这些操作打包/设置触发器,以便用户不必手动设置?

1 个答案:

答案 0 :(得分:2)

1)您可以使用Actions API方法 - actions_saveactions_delete。 (参见includes / actions.inc)。

<强> hook_install()

// Action configuration parameters that you can also set by clicking on the 
// Configure link that shows next to a configurable action in
// admin/config/system/actions
$config['beep_count'] = 10;
$config['beep_file'] = 'sound.mp3';
$aid = 
  actions_save(
    'userbeep_multiple_beep_action', // Name of the action callback method
    'system', // Action group
     $config, // An array of key-value pairs
     t('Beep multiple times'), // Action label helpful in the Trigger UI
     NULL // Create a new action
  );
variable_set('my_module_actions', array($aid));

<强> hook_uninstall()

$aids = variable_get('my_module_actions', array());
if (!empty($aids)) {
  actions_delete($aids);
}

2)功能是否支持导出操作?对于打包不可配置的操作,我觉得hook_action_info()已经足够了。

3)同样,使用代码,您可以通过向trigger_assignments表添加条目来显式操作分配给触发器,如下所示:

$query = db_insert('trigger_assignments')->fields('hook', 'aid', 'weight');
$hooks = array('node_insert', 'node_update', 'node_view', 'node_delete');
foreach ($hooks as $hook) {
  $query->values(array(
    'hook' => $hook,
    'aid' => 'userbeep_multiple_beep_action',
    'weight' => 0
  ));
}
// Multi-value insert
$query->execute();