drupal actions 主要是执行一些操作。
$ s! j2 Y3 k q: A7 w: h, W; S- {$ j6 S7 _4 B2 e6 X0 G3 g, Q
drupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。* z1 B- Z8 U& W$ n8 ?
' ^5 Z0 H) O% `4 r4 O, t5 ?<?php* q$ G& D3 l! n6 `/ ~
% [' [5 g0 J6 H. a/**
, K& [3 U6 P# B* S* Implementation of hook_hook_info
! V- E3 N% B5 L; C*
( U, B! P9 L8 f4 p+ _9 G* 触发器的定义,当执行具体某一个动作的事情+ t1 O1 m) X4 i" Q8 B) w
*/
4 e: ], A/ J) ?5 E% T3 v2 m
- K2 Q w2 [1 j* ^function demo_hook_info() {//相当注册一个trigger- ] [3 l" X# R2 T9 Y( Y
//定义 triggers,我用的是最新版本trigger模块! [8 u8 W6 I& l. M, m* M% ]
$items = array();
. T8 q$ M! p% L- } $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
4 J; A9 P, U' `8 @ 'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置0 g( O, N9 q5 r) b
'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器; p( E3 E. P. ?# R6 S
'runs when' =>t('when open our menu'),
W* J4 d; [9 a2 C3 R* _% k ),
9 F2 D' [# A7 R7 p% K& o) Q 'open_menu_test_trigger' => array(//第二个触发器: g7 S/ q; y) M$ U. `4 F3 ^
'runs when' => t('When open test trigger menu'),
' l' {( w# l2 Y+ x. A' _. w u# P ),
8 @3 S1 `$ S8 j$ L7 o ),
. A6 y! n) C1 @" U* \) C" d* z* T );
; {) V, ~( S# J+ s6 E' ^' j6 k3 U M; F9 \
return $items;3 M2 i6 |& }9 F0 T7 E
}
5 P7 e* R" S8 a( L% ^# {) n6 Q! r4 h2 x) C% X. R, a7 ^
7 T: b( ?2 H* g# ~" a
" ~( L, P7 y# H. x8 i$ V" r/**' L. ]+ m& @( l2 _4 g
* Implementation of hook_demo()." k! z" R- h! r
*/) M, `6 E' d9 F8 ~8 s2 S
function demo_demo($op, $nid) {9 j( {+ [/ v1 p& P/ S- b
+ G1 l' x4 H2 e9 T6 Y: R/ w
if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {
7 n9 V( e7 [5 b/ [$ [ return;6 G& y1 g& p6 L5 i4 d; t; @
}8 e. u% U# w- Q9 [1 K) ]2 l$ H0 W
if (module_exists('trigger')) {" a; Z( b; C& Z; `
$aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action: L2 ~! j- q8 f8 X( @. C H9 a, f1 a
$node = node_load($nid);
- L3 }) ^: D( o; z0 A& ?, G$ c' ] $context = array(" }, v( }1 i6 l( J
'hook' => 'demo',
" Y( X- h% U; }. i# g% h' H7 w' L 'op' => $op
4 _2 Q4 Y% A, e );! b7 d1 V2 C: g& Q" \
9 r8 D G/ g6 N7 ]. A% B/ C( E foreach ($aids as $aid => $action_info) {
1 ?6 c3 k% H3 l: K& `7 B" g actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数
& G4 o u% q8 C% e }
; V: g# v) F L; h5 K
3 o4 A9 Y" N5 T& n. O+ Q# M% M v }
" k8 a: I* D+ I+ m}
3 r+ e/ \ r/ t- q; ~# O
5 `7 j- d! O% m9 {, g- ?: L( u }' B% |! T/ C+ C, X, P5 O
, n0 {, q$ T$ L' xfunction demo_menu() { //注册一个菜单,来调用触发器
. r, a% T) l- _ B4 Y $items['test_trigger/%'] = array(
7 K* ] l u+ G+ S \9 G 'title' => 'Test Triggers',. S% P8 T5 a) P% S4 `* ^, |; s
'description' => 'Tell Drupal when to execute actions.',
- U- @) R& h9 E 'page callback' => 'demo_test_trigger',; G7 q% \0 c* S* l" j
'page arguments' => array(1),! f' B* I5 c* B- X- E
'access arguments' => array('access content'),
/ {+ X; h$ f( I$ G: L9 L1 W- a( k* Z# [( {6 h# e8 Y" R: m6 d
);
' @$ E$ B! t: h- S+ g) m return $items;% ^* H9 p7 T9 B! R
}
& [2 X' M% _# e1 L4 K% \' p3 v9 r( u9 C. Q* S0 X9 }
function demo_test_trigger($arg) {. r2 j) K' h% S% y
module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()5 d% ?* J7 q7 R" D/ k3 r1 z; V
return '222';
6 r/ B: |$ ^- ?. B& z}4 C" I* Z& Y& N* g* r
?>
( }# a, R. K7 [, p3 c1 I- m0 Z- ]+ P; |, x
|
|