Как «упаковать» продвинутые действия и установить триггеры в Drupal 7 - PullRequest
0 голосов
/ 23 февраля 2012

Я создал два действия в коде, одно простое и одно расширенное.

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), но я также заинтересован в изучении возможностей.Я установил модуль, но не нашел очевидного способа сделать это.

Двигаясь вперед, был бы также способ упаковать / настроить Trigger, используя эти действия, чтобы пользователю не пришлось настраивать этовручную

1 Ответ

2 голосов
/ 24 февраля 2012

1) Для этого вы можете использовать методы API действий - actions_save и actions_delete.(См. Включает / 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();
...