在宣告 action 相關參數. 啟用後即可在 admin/structure/trigger 來指派是否啟用項目. 若有需要額外參數設定則在 admin/config/system/actions 進行. 同樣的動作雖然可在 hook內達成, 但差異是直接使用 hook 一般沒有管理介面來選擇是否啟用, 使用 action 則可以隨時變更.
Trigger 在 drupal 系統內應該算是 hook的延伸, 因為 trigger 算是依附在某些 hook 下而動作, 而 Trigger 主要是為提供使用者管理介面而產生的模組而已
要在系統現有的 Trigger 下自訂 action 項目, 則需實作 hook_action_info(), 其分 有參數與無參數類型
► ACTION-NAME_form
若要改變其他模組中 action 的觸發項目, 則需實作 hook_action_info_alter()
Trigger 在 drupal 系統內應該算是 hook的延伸, 因為 trigger 算是依附在某些 hook 下而動作, 而 Trigger 主要是為提供使用者管理介面而產生的模組而已
要在系統現有的 Trigger 下自訂 action 項目, 則需實作 hook_action_info(), 其分 有參數與無參數類型
action 動作時呼叫的 function, 即為 hook_action_info() 內 array 所定義的 key 值/** * Implements hook_action_info(); */ function beep_action_info() { return array( 'beep_beep_action' => array(// 無參數型 'type' => 'system', 'label' => t('Beep annoyingly'), 'configurable' => FALSE, 'triggers' => array('node_view', 'node_insert', 'node_update', 'node_delete'), ), 'beep_multiple_beep_action' => array(// 有參數型, advanced action or configurable action 'type' => 'node', 'label' => t('Beep multiple times'), 'configurable' => TRUE, 'triggers' => array('node_view', 'node_insert', 'node_update', 'node_delete'), ), ); }
有參數型之參數設定表單實作項目, 與一般表單作業雷同/** * 無參數型(simple action). * $object通常為null, $context 則存放動作目標的相關資料 */ function beep_beep_action($object, $context) { //處理動作 } /** * 有參數型, advanced action or configurable actio. * $object通常放動作目標的相關資料, $context 則存放該 action 的相關參數 */ function beep_multiple_beep_action($object, $context) { for ($i = 0; $i < $context['beeps']; $i++) { //處理動作 } }
參數設定流程function beep_multiple_beep_action_form($context) { $form['beeps'] = array(// key:參數名稱 '#type' => 'textfield', '#title' => t('Number of beeps'), '#description' => t('Enter the number of times to beep when this action executes'), '#default_value' => isset($context['beeps']) ? $context['beeps'] : 1, '#required' => TRUE, ); return $form; } function beep_multiple_beep_action_validate($form, $form_state) { $beeps = $form_state['values']['beeps']; if ((!is_numeric($beeps)) or ((int) $beeps > 10) or ((int) $beeps < 0)) { form_set_error('beeps', t('Please enter a whole number between 0 and 10.')); } } function beep_multiple_beep_action_submit($form, $form_state) { return array('beeps' => (int) $form_state['values']['beeps']); }
► ACTION-NAME_form
► ACTION-NAME_validate
► ACTION-NAME_submit
若要改變其他模組中 action 的觸發項目, 則需實作 hook_action_info_alter()
在程式中要啟動某 action 則呼叫 actions_do 函式來進行/** * Implements hook_action_info_alter(); * 所包含的任何 trigger 其中一項有動作時均會被呼叫 */ function beep_action_info_alter(&$actions) { // 讓 "Block current user" 增加動作感知項目, 新回應 時也會觸動. if (!in_array("comment_insert", $actions['user_block_user_action']['triggers'])) { $actions['user_block_user_action']['triggers'][] = 'comment_insert'; } }