drupal actions 主要是执行一些操作。
& i: [ {9 I. D
9 X9 e# |6 z9 ?- gdrupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。+ w; h# h, D6 {0 `
1 B5 p% t- K# N: h$ o8 L7 P) l<?php
: _: J/ y* i4 @: E$ Z/ S0 A$ s# ~! l/ C, l6 L4 M( _
/** c b! Y! `/ Z
* Implementation of hook_hook_info
& |+ ~* ^. J6 o" `. Q, h |*
6 e4 i/ E: l% ]" U* 触发器的定义,当执行具体某一个动作的事情5 t* e6 e& t/ x* F7 f; q, c& |
*/
$ j' s5 c, \2 P0 r0 s- v8 C
+ l+ R; O/ d' Kfunction demo_hook_info() {//相当注册一个trigger: y' v1 \. o1 d. j0 ^4 ~' l ]
//定义 triggers,我用的是最新版本trigger模块
+ L& W8 b- j# t# D5 |9 D. O$ h& f $items = array();# Z5 L$ g2 B8 u& y( p
$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 自动注册menu, L/ \8 @* b* m8 w
'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置
3 H5 g5 W/ e- q$ {1 s7 \ 'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器5 C$ j! L- D; O( Y6 t
'runs when' =>t('when open our menu'),
, m* V# d. ]7 T. h* w: F1 Y3 V ),
$ E2 x7 ^- ~/ } 'open_menu_test_trigger' => array(//第二个触发器3 q, v5 C9 \/ U& Y
'runs when' => t('When open test trigger menu'), + S' a7 k8 [8 p' ]: A' e; G
),
1 [ y( T- i/ ?6 T ),/ m6 I1 L; S; w7 l4 X
);
7 ^. @8 G3 j5 S M$ i. W$ ^9 ]4 |% D0 j* C- c% x3 `3 T1 e: u8 Q$ `1 j" T
return $items;2 R4 ]) R( m' ^. j/ l1 d7 x; |
}
2 r' ~5 x& N2 R; H% p: G% B# W. [5 ]0 U7 k5 I+ e, K8 g
9 m: a; i: a% f1 V" l- R6 l0 }3 K7 h9 ~+ l7 Y
/**$ G- Q1 b3 j" E
* Implementation of hook_demo().0 D8 P0 O9 q" _8 q
*/
' }) g- O, I9 Q* s7 gfunction demo_demo($op, $nid) {
6 }, H" b: I [" v! e
% l1 h. S2 d$ e8 E9 C5 \) s! ~ if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {
0 H' ]% C' {% X, L4 j* Z return;- k: ~9 \2 V8 T& t
}' H) |$ \2 |9 H1 E3 Q8 o
if (module_exists('trigger')) {! M& S4 `2 ?. d
$aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action" m8 ] ?- E+ p$ p. K$ Q: s
$node = node_load($nid);. ?4 a- c3 J( o$ e2 Y+ a4 ~9 G/ W- S
$context = array(/ \& v+ ? K3 B# q$ n4 q* ~
'hook' => 'demo',7 G3 y) ^8 v0 n' l1 H$ c
'op' => $op
8 ^8 p7 [9 s- j9 i );+ i9 e0 ?! a; w- i
2 J! C$ ^" w" j; c( b
foreach ($aids as $aid => $action_info) {
# M, G( G A$ G5 D( V2 D ~ actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数4 d/ Q8 N. g/ |# o
}' S9 Z, ~. y% s ]
- X% ~3 C& H$ d U$ n
}
: B& I) N7 |) R+ K, Y: b {}2 q2 g7 P' t$ k9 t. s1 k
1 w# X# i+ J* w. G- X0 c& ^. d* D5 C+ q8 u4 x" J
6 ?' F W6 l E9 b1 T- Jfunction demo_menu() { //注册一个菜单,来调用触发器4 V8 y3 R) G0 `/ z" C. M
$items['test_trigger/%'] = array(; p. D: k* }* c
'title' => 'Test Triggers',
" a1 X$ _( I! m' E) d 'description' => 'Tell Drupal when to execute actions.',
! _2 {! `% R5 d3 R/ A) ^ 'page callback' => 'demo_test_trigger',( Z5 j* @9 p8 G
'page arguments' => array(1),
4 H8 y3 [. |" m5 g/ {. a 'access arguments' => array('access content'),' G: w& |7 B: F! Y( y% V
0 r( h1 S! |& S6 w9 S; R* Z% u' t
);3 v. e, z9 j( ~; f
return $items;, K# q- O+ ~; }/ y1 T a
}3 o4 m0 J* `+ v2 J
- s) S, s* g* x0 S
function demo_test_trigger($arg) {
! Q$ K* p+ J5 W* V$ b& o module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()
% `0 k, I0 | L9 p return '222';
7 J/ h. I2 c0 _8 m) D1 P3 W}; u) |- u) c8 q; x' c2 S
?>
5 F" l! l3 v0 s6 r
. Z% o( x3 q- M0 g' Q: l |
|