drupal actions 主要是执行一些操作。
. P( Y+ ^3 I( F/ E- K6 ^
) G1 Z' w& i5 f: sdrupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。
9 N* c6 _1 Y, k
8 R: E9 f* [8 z+ `6 H% r) d<?php' A" c, b0 q0 G5 x1 g" W5 M3 O
+ M% b( G% G% I9 Q/**
( A$ g8 U1 n$ E3 B+ q) `* Implementation of hook_hook_info3 o' f! Z3 F6 J" ?* k( {
*
- Q3 f) d* E* r4 R; I" E* 触发器的定义,当执行具体某一个动作的事情; p0 G* c: F) J% e* U, a
*/
8 Z$ W6 q* |) F7 |1 C
7 k- w/ N! I% {function demo_hook_info() {//相当注册一个trigger- v k. \3 u+ a# W) o
//定义 triggers,我用的是最新版本trigger模块
& G8 }) p4 }3 {* }0 X $items = array();
! g4 M2 R6 l2 k. Y: h $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$ L1 _5 L3 B: W2 Z1 q$ j" A$ e
'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置9 g0 M3 y$ G) r, u
'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器
$ C+ d6 D/ r* T/ [6 F& C 'runs when' =>t('when open our menu'),) b8 E) `1 D* G. C9 i" M% N8 j
),
* `' v! m K/ u5 [. ] 'open_menu_test_trigger' => array(//第二个触发器. C; u6 I) F: K% F& b
'runs when' => t('When open test trigger menu'),
+ [ ~) ^7 ?' y& q y o ),
% k: Q0 A$ R" i) v# ? ),5 c# q% C" d0 m
);% \, ]7 H- e2 j
1 V! `- q: B: M& ~) ?& D F# J
return $items;1 O5 i! A3 y6 f3 S- G3 {. }1 L [
}; q! X) r5 O u/ f* J; Y
, Q& l& M6 G( | j5 ?
& b2 g8 F2 A8 O' z, V0 D( ^% w
6 j* ]8 d3 V P) m" t- |" z9 n
/**1 ~* H( Y9 G6 V- O( U( F) z0 R$ A6 X3 o
* Implementation of hook_demo().0 y/ g$ G( c+ x( d9 m5 g+ ^1 p
*/
' W1 Q* Z: C/ cfunction demo_demo($op, $nid) {
# N+ _( l9 V+ C- ?9 k; Q7 p : D3 h9 O/ T* R
if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {
0 X* D3 g) q a: u n& q8 |8 t return;, Y% B! T2 M8 F7 g6 O8 C e
}6 J- |' n- T% O, i
if (module_exists('trigger')) {* H" x3 B U( v
$aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action
, D( h" v3 y3 X I( _3 I6 q* K8 b $node = node_load($nid);
0 y [6 d" d/ Y0 t# o& W% d $context = array(4 u, k, X/ E+ O6 R x
'hook' => 'demo',3 d, P4 |% y8 q; G6 S. e7 X
'op' => $op
/ c. Q/ | a1 C6 i* v) ]5 S/ Z );/ Y3 U8 }6 g, N- D1 y
: h( y5 n0 M. B8 k% U
foreach ($aids as $aid => $action_info) {
" X9 Q) K* \, w- x; a actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数& k" g! `' [3 ?( _% p M
}
: }2 C A/ K: A) n( {, q" M; C2 n8 {6 k$ v" I5 a
}# q9 Y6 {: d M8 b, k& o$ Z
}
# Q. D& \6 T7 \" u+ b8 K
3 Y# W* x# O! e7 a& i% T. F" A
( Q: V2 O; Q* u8 q. j2 L$ `# ~0 t( U4 \6 L, N
function demo_menu() { //注册一个菜单,来调用触发器
" d/ {* p0 k' a6 k $items['test_trigger/%'] = array(6 }' t; F+ G$ |( s- |4 l3 N
'title' => 'Test Triggers',
0 c0 I* G, B9 l" d; F 'description' => 'Tell Drupal when to execute actions.',4 r: t5 a9 J" q, `6 Q
'page callback' => 'demo_test_trigger',$ b" K% \9 ?9 L& `
'page arguments' => array(1),
+ H k3 Y( |% ~* F 'access arguments' => array('access content'),
^8 @7 ]- p- z6 W9 Q3 ~; P+ m) }. Q
3 v, x! D5 w1 K( w );
& M4 A/ d& b/ x U$ v; P8 C2 D4 l8 N return $items;' X8 R: |+ v( F
}% b/ I' a& t) `* B, m. i% e
3 ]1 L- U. B# ~; V* B$ N+ `function demo_test_trigger($arg) {
/ s1 l0 J9 o* V4 o% q( u- y module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()0 @4 P' Q) X# L, \' Z
return '222';
+ o, F/ g! F$ K}* ~& K" I. t+ o, ~0 _
?>9 E/ }# V/ n) u9 g1 W, W; ~
" k) l- C4 h& ?, y9 c |
|