drupal actions 主要是执行一些操作。$ _9 \" }6 U# e5 P% |
( [0 b3 M* T/ l
drupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。
[7 A" z- h$ {6 K$ W. S t2 i8 H, b4 y
<?php
3 w/ t. M/ R; }9 V4 j# M! b' @% N% j" N" `
/**% l: q& I1 u5 m9 l& X" d: ~
* Implementation of hook_hook_info$ G6 g: [& \/ M7 A4 Q6 V* } A
*, P' o* _4 z; T( a! Z4 ~+ `
* 触发器的定义,当执行具体某一个动作的事情
! J+ A( Y, C' O*/, g6 K! B. }2 u, D3 z+ x2 S0 n0 Z6 D
- }) W1 r8 Z* Yfunction demo_hook_info() {//相当注册一个trigger
. K2 V1 ?3 m* H* Q2 } //定义 triggers,我用的是最新版本trigger模块
# E3 g: N2 T+ m# O8 O $items = array();# [1 z4 m0 A2 Y& R% z: o
$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! B3 P3 G+ v% |
'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置
* c% z+ f) R, M. o* q7 f 'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器- j3 L6 g8 R/ z1 i9 x) e: ~
'runs when' =>t('when open our menu'),
- Q! y0 V4 t% U ),
" @7 c6 Y0 y( {' T 'open_menu_test_trigger' => array(//第二个触发器
3 j" R7 H- G! e 'runs when' => t('When open test trigger menu'),
9 ?$ E! U. O4 z- s6 ?- D& j- Q ),
* e4 r7 j- W. ` ),
0 o# i( ]! b5 P );
" G* M% g$ d# i' N) z) _8 q* ^% z, N1 o8 O2 V
return $items;4 w! N6 m5 P6 P: _3 `( D3 F
}9 }# K& D- M& v3 P1 k: C
$ q' B- D9 d7 H# B0 O2 U+ W
; \" V& `3 M. i8 @2 a/ l- o* U. z5 H. ^6 z$ h5 v8 o5 _
/**
% W3 A0 c& E; n o# h! d7 w! |* I9 x* Implementation of hook_demo().3 R. {" Z; N$ ^' g* D( f7 q
*/
1 s+ U4 a; A6 ]( |function demo_demo($op, $nid) {( G3 G4 W' o& t$ x+ p q
( z$ E- {% n7 S" V if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {
+ J0 d6 ?" t4 v! { return;- k3 ]' {! r" t i: w; q
}
b" d: r' p! X3 C7 ?3 n if (module_exists('trigger')) {
+ J5 I& F! Y# `" ^3 D $aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action
9 Z/ s& B& i) w) g $node = node_load($nid);
) b9 x9 P3 C4 U6 g) ~ $context = array(7 O9 ?; z$ k7 H. E. e
'hook' => 'demo',
% X4 I3 U! z) _* {. F 'op' => $op. {, i" L% g4 l4 M& X5 J L
);
% c/ O, r) n- t1 @ 5 ?) P8 }2 d* p( J
foreach ($aids as $aid => $action_info) {9 K; V" [& T0 m! s
actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数 F: `& B! q% b2 d4 X
}
. r! G3 W" ?6 `9 t: ], j Q& T& O4 s3 Z) t7 ?
}+ I4 J- ~( E9 j! r) G9 z* m- u2 N
}6 p4 ~/ Z& n0 F( h, N" E6 o# v# B
$ c' A: U; m: L
* A6 o* O' T2 M6 X; Q w! w
' q% \# c9 o j6 r% p qfunction demo_menu() { //注册一个菜单,来调用触发器
2 Q4 D3 q9 h1 O2 k+ R $items['test_trigger/%'] = array(
, m% ~* [# {$ g4 v5 i5 W$ d 'title' => 'Test Triggers',
8 c! K4 y$ L' L( B, _ 'description' => 'Tell Drupal when to execute actions.',; b. Z3 y# g8 ^0 I- [
'page callback' => 'demo_test_trigger',
* t" C9 C/ T& d7 n0 E& E9 b 'page arguments' => array(1),3 D4 K+ L. O$ E
'access arguments' => array('access content'),# q" V+ }" O+ Y
: \0 D8 i; G8 D9 R. b3 s4 c );# u9 P4 f3 g5 v6 L* N' b, h/ m0 w
return $items;5 J( Z9 E: ]* O
}3 X& ]9 c" M/ [# q& i
3 _& H" z2 s% l0 C! _' S
function demo_test_trigger($arg) {
% ~1 R5 E& P' p" _ ]' X9 P: r module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()! T( e) I; I! J2 o& J3 }7 w L
return '222';$ p. e# D# i6 V/ M- q' _& \
}) p- t o5 G8 f" v6 n
?>
6 E3 k* b3 w/ o' ` A; P: `
2 c N$ Q+ [, o& q7 a6 v$ `8 ?' |$ W* ^ |
|