drupal actions 主要是执行一些操作。 U$ n. U3 k2 H8 m
; |0 K0 B, @! H
drupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。
6 C/ R6 ^- j0 v" k9 e
. a* Q5 ?4 p8 {, k, n* M6 w<?php% Q4 D7 E c7 T
( m# Q4 ?+ ]- z2 [! W/**
0 Z, G* y5 v) K* Implementation of hook_hook_info/ o9 \) Q$ X. u$ G/ J
*
) C0 G' J: S3 b& p. _* 触发器的定义,当执行具体某一个动作的事情6 l1 x h1 F/ ?) r h
*/) `% W, X$ ]- e* ~+ s& C
2 w4 X6 `: _, w6 w- Y) o, H
function demo_hook_info() {//相当注册一个trigger0 I/ ~4 W) {7 b( V0 q/ Y" i
//定义 triggers,我用的是最新版本trigger模块- t- `0 m4 g7 C; v/ K7 b
$items = array();
8 w8 q/ H$ x) d! e! \' [6 a $items['demo'] = array(//module name, trigger 模块会自动注册一个菜单menu admin/build/trigger/module_name 在MENU_LOCAL_TASK上面的名称为模块demo.info 里面定义的name $hooks = module_invoke_all('hook_info'); trigger模块根据此api 自动注册menu3 N. Z5 n0 C/ U) E% ?2 ^
'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置
s K0 z0 q) x: v 'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器' C; D5 s- w6 T2 D* L- s; a' ^
'runs when' =>t('when open our menu'),0 F# q2 }9 ` k1 ~- P" E2 j# Y
),# u6 g9 F0 h7 y) i
'open_menu_test_trigger' => array(//第二个触发器
6 x) N! U; D7 q' }& |( `4 t) B 'runs when' => t('When open test trigger menu'), 5 L9 I# I6 D8 r+ p
),
) N/ l$ ], C* z, V+ `; N' I. ` ),) m% V* g: n, t" F/ |' g! j% f% N6 k
);* W. {0 C' _0 E0 h& n! Y
7 R- K. Z5 x+ l0 G6 F2 L7 z
return $items;6 O0 i* T# V* {" b5 U0 h
}
3 x- o- m6 S! A# D1 n
- D3 E, i1 u1 k' ~8 T" n7 h# F5 L) e- Y( B, q/ ]& K8 s( g
& K3 O1 k* l9 m7 s/** o% y$ t1 K0 f" s. p
* Implementation of hook_demo()./ ^7 s. g t2 F+ z) \- B/ R
*/( v) M# u( `" j9 \' V' J
function demo_demo($op, $nid) {+ f" p8 I' L6 \# g
2 h/ w( S% X( J$ I' ~
if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {) _8 J: d! b& [" `; c: ]; j& I
return;
( C) s6 C6 [+ | }
* Q9 }+ K) a1 u j) [4 C; ~ if (module_exists('trigger')) {
/ D! S+ P' h5 E) ^* e a+ } $aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action& q" }: Y; k- k" Z# n$ M$ P
$node = node_load($nid);4 v& c, f h5 v
$context = array(
/ x% D+ x; y" U0 Y- V 'hook' => 'demo',
/ d; Q, ]8 ?7 q& O- a" s 'op' => $op
. O' ^" p) P( K' u3 | );
5 r* a) H& N* K) L6 z
( D' u* h; c" h foreach ($aids as $aid => $action_info) { ?( u! U1 Z/ ^( q
actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数, X; V: P$ @& y$ b' l3 z* i
}/ W) I+ Q, v/ m+ w
& o5 Q. E+ v5 G/ K, D F9 u- [ }# |1 f/ {% k; t1 r4 ^
}
9 f$ X- `0 |+ F3 k2 I: d* L) t* U7 `$ p
" Z$ R/ I! `8 N* C& m$ t/ y& M- b5 P/ f$ \7 @( S
function demo_menu() { //注册一个菜单,来调用触发器
6 q$ X: V+ Z, [ $items['test_trigger/%'] = array(
% q6 d* ^6 t5 T 'title' => 'Test Triggers',+ G4 ]+ i$ ~* q, ?* r9 Y$ g
'description' => 'Tell Drupal when to execute actions.',, l& I4 H+ l7 I: B# k. H
'page callback' => 'demo_test_trigger',' G, ^0 Z8 y: Z
'page arguments' => array(1),
- X! ?9 D: j* L" l+ S 'access arguments' => array('access content'),: P! T5 ^$ K+ g7 l# K2 d
/ o( t- z" w- x- m1 H; P* |- ~3 R
);
; o9 K5 k1 O) h1 Z return $items;
5 k6 h ]6 @0 D) e1 h}% ?: F- o0 y2 g; i3 K! G. D) U
8 P2 J: K$ w, g1 I
function demo_test_trigger($arg) {8 m R- k& z/ g; J
module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()8 R" v3 _% ^5 K# q0 C6 C0 Q
return '222';
. Q, g: Y1 v' U* n' `0 D}; B( n0 {+ e$ K4 z+ [
?>
$ D! W- J9 U4 s- {: n/ L5 L$ R$ g9 B8 _
|
|