drupal actions 主要是执行一些操作。* [ u. |! B; p) w( Z! K7 v
8 l9 i- v/ Y( P) U4 E2 X
drupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。
2 @ _: M: k8 ?. R- v8 A4 A4 N+ d1 _! c, W% q( N. y
<?php) A# Q- E3 }% r% S
$ E2 @; j/ p f5 d/**: @) f4 x0 o4 Y) G0 g% C
* Implementation of hook_hook_info
9 B7 [2 M1 L1 L8 o*9 X1 C3 |3 l0 O& x8 R* B
* 触发器的定义,当执行具体某一个动作的事情# T/ x: n z7 w5 l/ W" s- U3 ^
*/- w; m" H8 |. V- Z1 h- A
% Z2 P9 i# a5 H# @
function demo_hook_info() {//相当注册一个trigger+ A+ g( q. d! ~6 ?: U5 b! G4 t
//定义 triggers,我用的是最新版本trigger模块
' ^7 {& r4 ]/ C7 l $items = array();" H# R$ ^3 b0 J! X7 O. o! A4 U4 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- o4 J% h0 c' T5 i4 h
'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置9 A% ^0 L V' I6 A0 f* ^3 i
'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器6 ?. ~ T* R# K3 @1 [1 Z1 |2 K3 z0 A- t
'runs when' =>t('when open our menu'),4 _, J I, y0 n2 H1 I/ N5 }* Q
),
) a9 Z5 q9 `% i9 A5 v' ?( W 'open_menu_test_trigger' => array(//第二个触发器
+ y6 V- x6 F4 s. [! R7 e 'runs when' => t('When open test trigger menu'), $ i5 z7 s8 r: q
),
* b8 \$ \2 a, y( M. K ),5 r: t4 k8 i/ E
);
* n( ^0 n# r! N% a& t9 l% a/ W6 x' v7 T1 ~- n; z. |
return $items;/ i' X5 _9 k. T) M
}4 |1 V; n/ Z9 e7 y6 p
9 B* m7 x! U- r. B3 G, K: e
' H% c: D3 t: S# l5 L! K
! ^+ W' m# [* y: o; e/**8 [/ Y# n0 L* o5 J5 H7 G
* Implementation of hook_demo().0 Q) o! _; q% V3 D+ ^6 f k E# _
*/* N d5 ~' f& N
function demo_demo($op, $nid) {+ S6 M% z% R6 u; y3 m. t# i
; k" G; x: }% g) x if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {9 L9 g$ Q% [, H
return;
5 R3 `$ s8 X; c) [$ A# u }3 f/ |! z" z* Y9 Y" b" J( ]) D: K
if (module_exists('trigger')) {
! n" `% h/ @: H3 J$ m4 G, ]6 r! F $aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action$ ?' \% e( A$ k1 ?) @
$node = node_load($nid);4 ^/ \# r- n4 u# \. d) K0 g
$context = array(8 w* a9 T9 Q! E
'hook' => 'demo',) t; e( O0 {9 |/ @& Y4 J# t
'op' => $op
* U; Z3 P& i5 r% b );
' L; M( t' f0 R " @, Q; {- ^# {, r# ^( |6 D
foreach ($aids as $aid => $action_info) {
8 X% P* F* H& C5 R' F actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数
" Q8 k: R3 c, r* I% [ }
, ]4 s- |" T( a; E+ o
1 @5 I$ p# o7 J0 d2 x$ C }; A( W, Y3 t Z' H- Y7 Z# U; n
}
; z/ X* s0 A2 H/ _" @" m! j5 U+ X* g: c7 S4 ~9 |9 K/ j
/ a# p* ~, }7 U/ I
% ]8 h: ~- V! s) y6 H3 |function demo_menu() { //注册一个菜单,来调用触发器8 y: ^% w) c1 f
$items['test_trigger/%'] = array(: q8 `& B9 S2 D" z) I& H9 F" @* \3 \
'title' => 'Test Triggers',
% [1 c9 r6 l2 H0 Y/ l- i/ t 'description' => 'Tell Drupal when to execute actions.',1 ~/ d! {; v3 `
'page callback' => 'demo_test_trigger',. ^/ ~ J: b; \% q& d- t' b
'page arguments' => array(1),7 z0 ~* d+ X5 k3 W# U* y
'access arguments' => array('access content'),* Q: Q5 Q# `/ R% h2 W I
8 N. S- s) d5 r. O
);
8 ^2 B0 v: U, J return $items;0 h4 N6 u0 r' M, u( r
}
8 |2 t$ w4 a5 Y" J1 d2 d5 \% H
) ^2 C* j+ W ^! j. @function demo_test_trigger($arg) {
, z* @' Z- _. N2 L module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()
& K1 l7 X, K$ Q* p2 `/ F return '222';# s$ P+ _% g% K4 i* _+ L; R
}$ S" H X8 l4 L* `) m2 j
?>; x+ C5 Z+ `& G6 j$ k; \0 p5 H
6 n# w: H0 B# ]1 ^+ s1 P' S' v
|
|