drupal actions 主要是执行一些操作。4 @ Y1 q, Q4 _, [
9 J/ G8 v: W5 p+ [drupal trigger 可以自定义触发器。也就是在什么情况下去执行一个actions。" T/ i, {( c9 S0 l# B- [
8 |1 `9 [9 ]5 r+ R<?php
1 Q+ D$ o. F" Q/ c& g# D+ ^
4 v E _' X5 _1 @# f3 w$ D/ C: x) `# a/**4 r0 I4 N4 _4 X$ s
* Implementation of hook_hook_info) P* E' k% _/ L+ o: v0 H
*
0 f1 V/ y. L5 x5 P* 触发器的定义,当执行具体某一个动作的事情( w2 P. A3 d7 e" ?6 K
*/, V1 t& }6 g, X9 E1 ~
8 q5 U3 O# h' A X* J4 p [9 t
function demo_hook_info() {//相当注册一个trigger
u( q* y7 l7 [2 A! x. M //定义 triggers,我用的是最新版本trigger模块
" E, t8 K, x) H' p $items = array();, A. X% F# J- ^6 w- c
$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
; u$ N& T% p- c" @- l5 w# L0 f 'demo' => array(//也是模块的名称 $type变量 $hooks = module_invoke_all('hook_info'); 根据此api来处理打开admin/build/trigger/demo 的form设置2 S6 _+ |8 N" ? H5 i
'our_new_trigger' => array(//hook_our_new_triiger 也就是$op 变量,第一个触发器
$ p& t6 d# A. e8 m+ G6 A0 Y% x8 J 'runs when' =>t('when open our menu'),
7 |9 r, Z3 P' R% |6 z6 r) } ),( V( c: P% T4 q3 r& A& P$ z
'open_menu_test_trigger' => array(//第二个触发器
% [8 Y3 u, q' J. D6 T2 e" Q* {5 s 'runs when' => t('When open test trigger menu'), 4 @( S# B/ S& G4 ?
),, ?0 Q% R: O# t' ^/ y/ U5 o! K
),
2 [9 j+ u! D1 b$ e/ m8 t );
% i2 p! Z7 b5 q% X- W$ l+ z8 _# ?3 \: ?
return $items;7 g1 U1 K6 ~4 J; x4 b. c7 d- }
}/ }7 [2 ~& t) D% {5 x7 g1 E
' U( h1 F3 T: Q9 u
( M+ O% }, E7 Z( B9 {
4 }5 A9 A: U3 @& S9 Z/ {$ m/**
2 X$ T5 p& b/ O* Implementation of hook_demo().6 A1 Z2 t* ~2 `/ q; }# N
*/6 \! s- Z, N4 J4 g1 ~% [3 Y/ k
function demo_demo($op, $nid) {6 @5 H7 H% K$ b. A
+ O- n; x4 u3 |. X
if (!in_array($op, array('our_new_trigger', 'open_menu_test_trigger'))) {
0 p! u- X4 T2 ]" a2 F, `1 R return;6 V, `6 H# S4 ^ C/ e( S% U/ N( x
}
. @8 K' @/ e3 w- O. G: t. }* R if (module_exists('trigger')) {; Z( ^. p5 U* e/ ?
$aids = _trigger_get_hook_aids('demo', $op); //调用trigger 关联的action
7 h" A# y" f5 \" C# s $node = node_load($nid);
+ B4 X/ ~5 s6 M+ o, t5 q1 X, \ $context = array() n; {& R) Z1 V1 g$ B
'hook' => 'demo',
3 A1 G# H3 f8 j- V& ] 'op' => $op: Z/ K! D1 U- K' n
);
6 g" a1 a2 [5 w% S5 J
! m8 V( m3 D5 K a* k' ~ foreach ($aids as $aid => $action_info) {
( V( l( o4 P, N& z actions_do($aid, $node, $context); // $actions_result[$action_ids] = $function($object, $context, $a1, $a2); 找到$aid action 相对应的 call back 函数
7 `. q _# F, ?4 R }6 E* _' I6 F9 r$ C+ Z2 P
' w/ V( x, h! W4 G }
' ~/ W( B" l5 u7 H; i4 p& s! N}! r3 [+ `* F3 y; r: }: R4 I# q: p) \# d
1 q# [* [; \1 g5 L9 y$ g& P8 O2 q8 O' Y0 G3 U, w
' i+ H6 }. }! Q7 u1 \. F
function demo_menu() { //注册一个菜单,来调用触发器2 G# o# F) v$ q5 g; e z
$items['test_trigger/%'] = array(
, S9 [. H. h- z S' `' V$ V* n 'title' => 'Test Triggers',( ?1 W0 T! n' z1 T7 f* i
'description' => 'Tell Drupal when to execute actions.',$ z) r( p, `) Z5 e5 T
'page callback' => 'demo_test_trigger',
% J) t' [! m5 e! s+ i& n3 z 'page arguments' => array(1),. I# L, B1 W* W4 `
'access arguments' => array('access content'),
5 `9 B3 a+ s+ p- E1 L+ A% c; v3 V/ v
);
' t% J. P) K0 S return $items;
. ^6 Z. I2 c3 n}% g! G! W' l4 X( O' } S
( O0 Y9 A9 x, \- c' p! h2 W. ifunction demo_test_trigger($arg) {
' B, n0 b/ p: L) z' u" F module_invoke_all('demo', 'our_new_trigger', $arg); //执行hook_demo() 也就是demo_demo()
( I8 o8 R8 i0 D return '222';; i' d0 q) h/ o8 v4 P* @
}
" ^0 }) ^* W6 A+ D1 |?>& g2 m, q9 X3 G* d
2 I, l- a8 E2 G |
|