我在代码中创建了两个动作,一个是简单的,一个是高级的。
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)以编程方式执行此操作,但我也很想了解功能。我安装了模块但看不到明显的方法。
向前移动,是否还有办法使用这些操作打包/设置触发器,以便用户不必手动设置?
答案 0 :(得分:2)
1)您可以使用Actions API方法 - actions_save
和actions_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();