drupal actions 主要是执行一些操作。
j+ j* @8 h L2 U0 Z j n
' u3 r8 Z* J& M7 V+ X( m, Z( c) g4 i! pdrupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。
/ ^7 K7 a0 x0 f! @" T2 x+ r' L: W, Y, `( v1 B
<?php
# M4 ^: B' V0 y( h q9 P4 ~" \
# i# ? L8 c+ C2 Z& v- V1 G% b8 h/**
3 O" ?7 h' M" p0 w% }! c3 L* Implementation of hook_hook_info6 `+ o$ |+ v: f+ ~" |0 Y/ g3 X
*2 F4 H# z5 n# G: M0 S
* 触发器的定义,当执行具体某一个动作的事情
7 T% \/ o# S/ i8 E*/
7 U3 z) r G) e" Z8 p+ w# P" l, K! W. a: n% ~$ m. M5 u& i/ j8 B- Z
function demo_hook_info() {//相当注册一个trigger
; L* j2 I8 O+ C2 |8 n //定义 triggers,我用的是最新版本trigger模块4 V4 V4 [, ?3 \, G
$items = array();
b# B) C1 r y$ k7 I $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
% j3 v2 s% \4 m3 G/ F5 h2 X/ g 'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置
1 R+ n0 v8 V( i7 M6 y3 c 'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器. S1 M4 L' w" i7 P, L
'runs when' =>t('when open our menu'),
, ?- R7 I& f/ b0 f# F) D ),) L. j) G L+ [; Z& e; m
'open_menu_test_trigger' => array(//第二个触发器
5 ]) d$ i5 i$ \( m) x9 M. i 'runs when' => t('When open test trigger menu'), - Q& l) p. k8 o- J9 n" a; ^ Z
),
1 g, B& [6 x6 s; k- I3 u& F: H# q )," d5 a0 d% C# d& R a1 W& `2 |; R
);5 h" N$ H7 ^3 F5 M0 ]9 _- X! R
# c9 y$ ?4 d5 q( _
return $items;
C# [" N! J u( c$ f% r, Q( T}
9 l; K2 t) L- X9 `- i6 i- ^9 p* M; J6 ^7 t+ B% ^6 b0 h
5 f2 R4 @2 k `0 M
5 H. y2 D( K Z+ K8 e% u
/**
4 l, @" F6 u& X5 ~ t8 W) ]* Implementation of hook_demo().
k& u, k0 B4 D C*/
7 {/ g6 W, _: C1 t4 t2 i$ Mfunction demo_demo($op, $nid) {6 k- {5 r$ w. s$ T* `7 a; h! X$ K! a
1 `# ^" I2 ~. M# U" Z
if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {
2 Q: [1 Q: p% S# t return;
/ M! a+ g, o4 _ }
% }2 T/ \/ j3 U" t( [/ F3 p if (module_exists('trigger')) {
! O' l3 q" J2 E- I! q% O; E $aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action. k5 J: K1 H7 J- }- F* Z
$node = node_load($nid);3 |1 l6 \$ \ q5 T* i
$context = array(# q. j2 x5 [& @7 @! T' M
'hook' => 'demo',
0 ^$ I. o9 [7 A; x2 {) w 'op' => $op
$ z4 P* R% t9 f5 m/ W% F );
5 [4 H4 Y$ ?- f: d5 {2 ` , a$ `1 ~7 d9 k( k
foreach ($aids as $aid => $action_info) {% p0 e* g$ m6 ?& \
actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数8 m. H3 F: M6 b: J; o/ A
}; ]: H1 R- X2 Q, N# o1 W% J
8 g' L4 B: m( p$ X t }
R' c+ c+ n' p3 }+ w+ w4 _: b}
f) C' A+ ~* i0 m. t5 h$ M, j/ i. g8 I: X0 g3 R/ O
% |5 v3 G; ~, k" J
5 P/ K3 f4 h/ w4 K' q8 o" j5 Pfunction demo_menu() { //注册一个菜单,来调用触发器, `1 \/ f% I; }
$items['test_trigger/%'] = array(
4 U F. f0 \# u; T, Q3 \1 V. ^' \ 'title' => 'Test Triggers',3 x. M9 g" K: _$ c" b
'description' => 'Tell Drupal when to execute actions.',; @ R8 _6 l) l5 n1 S/ a5 F
'page callback' => 'demo_test_trigger',' j6 i; @2 P0 i
'page arguments' => array(1),8 I& B, m1 ?/ h5 n
'access arguments' => array('access content'),
! `- ]# B; P+ V, y v1 K, g3 u% G
2 g% j; W, `6 m& F );' `6 ?- n0 M' t$ o
return $items;( d! o! w$ n7 U
}5 t+ Y. Z. M# q: R
4 [3 @, K! W* A: @
function demo_test_trigger($arg) {
5 j! q8 C% r. I module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()% m8 c8 G) e, z K% T
return '222';, [- C# Y9 j% @3 v
}, ^7 c1 W: Z/ h \) I
?>
* ?. X# C5 n/ ~7 q8 m- i5 \! S: c; q; X2 E4 G7 t' \
|
|