自訂新 Trigger 或 現有Trigger增加項目

1 篇文章 / 0 new
author
自訂新 Trigger 或 現有Trigger增加項目
除系統提供的五類Trigger外, 使用者也可自行定義 Trigger 項目, 除須實作 hook_trigger_info() 外, 也須實作自訂出的hook
// 實作 hook_trigger_info(); 定義自己的 Trigger及hook
function annotate_trigger_info() {
    return array(
        'annotate' => array( //群組名稱
            'annotate_insert' => array( //trigger 項目, 也是 hook
                'label' => t('After saving new annotate'),
            ),
            'annotate_update' => array(
                'label' => t('After saving updated annotate'),
            ),
...
        ),
    );
}
// hook_node_insert
function annotate_node_insert($node) {
    if (判斷是否需要觸發) {
        module_invoke_all('annotate_insert', $node); //觸發自己的 hook 或直接呼叫
        //annotate_annotate_insert($node);
    }
}
// 實作自訂 hook, 在此觸發 action 項目
function annotate_annotate_insert($options = array()) {
    // 由 trigger module 傳回所有已啟用 'annotate_insert' 的活動trigger.
    $aids = trigger_get_assigned_actions('annotate_insert');
    // 設定基本參數 "group" and "hook", 然後觸發所有啟用的 actions.
    $context = array(
        'group' => 'annotate',
        'hook' => 'annotate_insert',
        'node' => (object) $options
    );
    actions_do(array_keys($aids), NULL, $context);
    //無參數型acion 通常 node或user 資料接放置於 $context
    //有參數型則 $context 放置參數資料, node或user 資料則已參數形式傳入, 如下
    //actions_do(array_keys($aids), (object) $options, $context);
}
 
/**
 * Implements hook_action_info();
 */
function annotate_action_info() {
    return array(
        'annotate_annotate_action' => array(// action呼叫的函式名稱
            'type' => 'node',
            'label' => t('own trigger'),
            'configurable' => FALSE,
            'triggers' => array('annotate_insert'),
        ),
    );
}
 
function annotate_annotate_action($object, $context) {
    watchdog('annotate', '自動 Trigger 的 action 被觸發');
}
hook_trigger_info() 亦可在現有類型的 Trigeer 內增加新項目
//在 Node Trigger 內增加 archive_nodes 觸發項目
function annotate_trigger_info() {
    return array(
        'node' => array(
            'archive_nodes' => array(
                'label' => t('Archive old nodes'),
            )
        )
    );
}
Free Web Hosting