1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
1 C( D5 ~6 a0 @6 g<?php# Z$ w# J6 u _8 n
/**3 [0 y& V: W. {0 T |
* @file' w0 F2 Z$ J) q! D7 S
* 方便用户联系我们.
, Q7 @" u: M8 O w" q */9 U4 R' ~0 N2 |& M* o
/** u' W) K$ G. p: t
* 实现钩子hook_menu()." v2 v, Z/ k4 s; l1 K4 q- s; _
*/2 e! P# p' d. y/ Q* |$ P
function contactus_menu() {
& l: P) y, O+ J1 |/ u $items = array();' G3 _% M4 ~2 b6 n$ `
//联系我们菜单项
* D" R% y* h+ Z. E! B+ U, F $items['contactus'] = array(5 s/ ~5 v8 e2 b" m
'tilte' => '联系我们',
* [6 e# z3 s! r9 U9 W0 l9 B 'page callback' => 'contactus_page',9 }* V% t) |/ i) J l( n
'type' => MENU_CALLBACK,7 `% T' d3 { w$ v, O! a) J
'access callback' =>TRUE,
# a9 h8 |9 Z& A 'file' => 'contactus.pages.inc',
% ?5 a% t* Q4 D1 l) N) s );: ~" |' R( ~( U4 P' t5 v! Y/ c! K
//确认页面菜单项
7 d' E3 P9 W2 ~3 P) I V+ x4 O $items['contactus/confirm'] = array(( L! k1 d! u4 Q) d. H! a) n
'page callback' => 'contactus_confirm_page',
& H& |& g1 c; q 'type' => MENU_CALLBACK,- j0 V q9 \& z( H1 n
'access callback' =>TRUE,
! d1 L% c% [. g. x 'file' => 'contactus.pages.inc',9 C+ q; r. q) @/ d+ [0 j
);
- |- ^; y# K P f- a //致谢页面菜单项
0 `9 A6 a! w V, H0 \ $items['contactus/thanks'] = array(1 ] W/ \. H$ }0 U
'page callback' => 'contactus_thanks_page',9 v# _( P( w* c9 C
'type' => MENU_CALLBACK,
% w6 G0 }0 E/ x' m4 Q. ] 'access callback' =>TRUE,
2 ]# W8 ^$ S( `2 a5 f4 ~! O* p% y, p 'file' => 'contactus.pages.inc',- k3 A9 s% u' D! s1 X8 M
);! Z. y) p7 P" q" b, c" w
return $items;
" N3 ~& v$ e H+ f7 d/ j7 V! R}
1 }) ^2 c V7 P4 m* ^' @; I `/**: o! j2 f4 x5 k: s, I4 i) H
* 实现钩子hook_mail().- Z- q0 b1 f2 M6 @
*/
/ ^$ X, j$ S3 R8 K6 ~function contactus_mail($key, &$message, $params){+ B/ m3 O# M6 I' O3 o t1 o
$language = $message['language'];
2 ^! J' ?! d3 t, I% Y$ \! i9 P switch ($key) {: _. O2 y9 Z! `8 Z7 n7 E& H
case 'contact':
2 J: e" B o+ @1 h& _* j# g6 D# x , i f6 W C; I. m- l
//邮件的标题2 K& ^# l* h6 [) z
$message['subject'] = '联系我们';2 @% n! o+ F0 D) r3 F
Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
2 _+ ~% \9 P: z; T1 V8 t2 P 0 {- [! r; o: I P
//邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源
) L* B6 K3 n; e" V $message['body'][] = '姓名:'.$params['name'];
% U( k% L! r8 D! |3 `( F4 H $message['body'][] = '单位名称:'.$params['company_name'];& Y; x, d! B4 Z/ V
$message['body'][] = '电子邮件:'.$params['mail'];
. q5 O* }; J$ m5 e $message['body'][] = '电话号码:'.$params['phone'];! q+ L3 \" n0 a' Z% {( |
$message['body'][] = '邮件正文:'.$params['contact'];; T6 _2 B8 _7 }" A1 l% @" f. a" L
" ]# `: c6 c. |
//对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']! I6 A6 a: M7 ]8 T, p# y
$visit = "";
& Z$ z. ]2 D0 G6 k if($params['visit'] == 'other'){+ z. a8 Q' G& j6 e6 b( q1 j9 [3 [
$visit = $params['other'];3 G/ Q% {4 X& Q6 V5 s
}else{
3 t" K5 W* V% I $visit = $params['visit'];4 r* L# K8 p/ f+ e" a# _7 K$ Q
}
! o9 Q) ^. R2 k4 I; g $message['body'][] = '访问来源:'. $visit;
0 T# F7 y# b) P4 j) F; l } n. v, C* Y; ?. G, g1 \
}; L C! A. g3 R% G/ c2 A; F" S
2 d( z9 j& B# |* T
, `% q' u2 U; m7 ~/ z$ N/ s7 a, l& w1 s. K6 u1 s9 |; N
5 X$ {7 D* v. T% e; U* I6 G2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调: g* e4 ?, W+ R6 E+ i9 k
<?php/**
5 d5 M2 J6 G' R7 |# m * @file
) l V' M: w9 @3 i8 U * 各种页面的回调函数.
# ~/ z9 \' D0 u' d2 e4 C9 p# { */
+ A8 m% A7 c8 b" R8 ^/ M
f0 e- y; c1 g. {3 h/**
& }7 c* t) V% k+ Y/ C * “联系我们”页面的回调函数; V- w& u3 I6 R6 _2 t( V
*// E/ |; {6 u1 |! j! F
function contactus_page(){8 c5 C+ _* V9 J# i
//我们为这个页面设置标题
2 |/ k1 `- ~+ Y6 Z; ?/ Q% r; S drupal_set_title('联系我们');
1 D9 R# j5 b# y- Z4 C9 {5 M( Q5 O
/ Q- x& [2 b, V& F $render_array = array(7 {* @4 f) [, z& n, S, `8 R
'#markup' => '',
. K" @$ |" S3 b4 F8 ~ );/ d5 K6 M2 E) w" J6 F: V
; Y. m; h2 n+ [1 r& h
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。! l; m$ g: t& E( p$ ]
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));
& d: W# g% L, x8 A) V2 A 1 _0 [5 Y2 M! z; ]& o. X( Z# e+ w+ p
//Drupal7的页面回调,返回的应该是一个数组5 m3 p* q8 j0 |: U3 |2 U
return $render_array;
$ L* x" A o6 W}/**
' ~1 e7 \! p# y# n" d5 Q6 M7 _$ F! q * “联系我们”表单的构建函数3 y! B& Y) I6 l h0 F
*/. a$ ~7 k }( S8 V. p7 {$ y
function contactus_form(){
/ x O1 S* V0 p2 t' i4 u //添加我们自己的CSS,用来控制表单的样式. {' F6 [' f* L( K
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
- y+ t0 D- F2 Q* _5 r& D! F' ^. ? 5 z" V5 A/ J |: K, N, Z% J% ^4 ?
//提示信息,默认为markup类型。
5 w; j" |; e0 {9 c6 s! H $form['tips'] = array(
* k( k+ ~! |% Y3 D+ f '#prefix' =>'<div id="tips">',, v! K$ ]' `4 u$ B4 b2 y. f; O+ A
'#markup' => t('<span class="form-required">*</span> 号为必填项。'),
( T$ `" v" \* p/ `9 j '#suffix' =>'</div>',
* }* e5 X9 j* r6 F );
9 X' O; l( _. ` S Q) ]
: o7 y0 V* _. s& m. W //表单元素“姓名”
2 W! n- I/ v( j" ` $form['name'] = array( x! T; I0 q- [
//表单元素的#title属性,对应于实际输出中的label
& X0 n' k5 C5 Y" w$ ]3 m1 ~ '#title' => t('姓名'),
* o4 r, ?2 Q6 p4 ^; S3 o //表单元素的类型,这里为textfield
* E+ i1 J- a4 @8 q! z0 _% j '#type' => 'textfield',% W8 E8 l& y' f u3 e
//这个表单元素是必填的* P) R' {: Q' {2 M& f% `' l2 o$ Y; F
'#required' => TRUE,8 D! @% T4 h" b# }9 W
//表单元素的默认值,这里使用了三位运算符和isset进行判定7 g* u/ Z: L( |
'#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
+ h6 N }/ M4 c: U) y& ?% P; w //表单元素的描述,* C! r# s% `7 e" I" p
'#description' => t('例如:周星驰'),# s1 n W3 C: A9 i
);$ [: C+ n) N* D( l, Q8 v
& q+ X" P1 c* d; m
//表单元素“单位名称”& o( b7 b0 A8 P9 g, ~. j; X) S
$form['company_name'] = array(
( C- V& O& Q9 j% p7 {/ N% T$ G; \& M '#title' => t('单位名称'),; K: c5 G; _1 c; Z: T
'#type' => 'textfield',
# u7 n+ E/ Y1 Z '#required' => TRUE,
$ l5 [4 H' U" x+ ?5 V5 W '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",& ]/ C% n, }) L
'#description' => t('例如:北京无名信息技术公司'),
+ t* a* C8 B" K* l! c. [ );) ?" i# h3 @' x5 [/ t9 q8 m
1 ]& Y2 J9 u# y& q$ f7 {( e
//表单元素“电子邮件”
" a3 O% z7 a3 Q4 Z $form['mail'] = array(
0 j) ?$ N& }9 x1 E0 o* u '#title' => t('电子邮件'),% z$ D5 ?7 {1 Z' o
'#type' => 'textfield',0 u: [+ }: Z% U2 x& l
'#required' => TRUE,7 h, k5 u5 D/ w! o" o
'#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
$ }2 u! v$ e6 ~* _, }, x2 ~ '#description' => t('例如:info@example.com'),
" p g% s: C: B7 _. s/ v. ~ );
% f4 @* P9 q5 m9 G' B ! `! l3 L8 w0 F) {
//表单元素“电话号码”8 r, _. {4 a/ p0 g! [! O9 q
$form['phone'] = array(
0 Q `9 \) T* O$ u( d '#title' => t('电话号码'),5 }8 a, t2 G1 i8 y3 d I% H& v3 O
'#type' => 'textfield',
+ G' S6 U8 a p7 f) u6 R7 u& k8 K '#required' => TRUE,* I. g" ]) ^' D+ \& R; V
'#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",4 ] e: ^/ Q& T
'#description' => t('例如:010-88888888'),
i8 C+ a# G2 ?4 a8 I% M8 m6 v/ w# G );9 r2 V, x/ V) f- p8 `
9 |- J8 F' f* P3 x# v- M% O, k
//表单元素“邮件正文”
. W$ E; `, ?7 g3 M+ Q4 t8 _* C $form['contact'] = array(
/ q3 N) P& Y) v$ Y- P' Q9 B2 ~* s '#title' => t('邮件正文'),
. _1 Q6 B* N+ c6 v* Y: T0 e0 s: j //表单元素的类型,这里为textarea4 g9 S+ s3 v! a3 _! M. ]& a
'#type' => 'textarea',' @- |/ S+ h) V5 B
'#required' => TRUE,0 q0 T; }1 H9 I9 Q8 y# w
'#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
0 b# \0 A& Z) X5 O9 W4 [5 h );* K% r3 T% I4 ?
! J" \# l+ `' r t //访问来源的可选项/ @% p8 S0 D3 F0 F5 e' D( ]2 @; ~
$visit_options = array(1 c) \8 m" }6 _# c/ [# b2 S1 m
'baidu' =>t('百度'),) r$ F1 Q3 D* ?
'google' =>t('谷歌'),
; ]& D1 Y5 E9 x8 m 'sohu' =>t('搜狐'),% d) m% P: x8 F- ]3 D6 Z
'other' =>t('其它'),
) I( u6 s% l. K$ [8 {! g );
% n# V/ ^ _2 K$ ^0 }7 [ //表单元素“访问来源”9 i& r; o ?8 Q8 i1 m1 \8 @5 I
$form['visit'] = array(( E& @( v" d& q
'#title' => t('访问来源'),1 s. [6 M2 P- I7 F+ t+ Z. h; b
//表单元素的类型,这里为radios% T( f- |7 E7 n0 N& ^2 G2 B, {
'#type' => 'radios',
& k: T3 S4 E. F' [7 p# q //单选按钮的可选项。
2 Y3 h- p4 \& ^ '#options' => $visit_options,% N S: P3 s D' [8 `0 l
'#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
6 @# j7 R2 J; e6 t/ u //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
, p2 C$ n( T+ c- A7 S: n '#prefix' => '<div id="visit-radios">',5 W7 y7 _) V3 K
'#suffix' => '</div>',% l1 z D! w' ]; T
);
* i+ c0 W+ B. r* p' E + G6 _/ k4 |' B# x& g
//表单元素“其它”,它依赖于表单元素“访问来源”
8 Q9 _7 d& b) ~7 \3 R7 E* S; A $form['other'] = array(
. |& C- I7 w; l, Z '#title' => t('其它'),
' y$ F5 T" H0 V" B* t5 r '#type' => 'textfield',
& @' Y' B( A0 X! W6 A# g0 g '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",$ B' a/ o% S$ O5 b4 q3 n
//这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来( X3 e1 }2 n, W, n) k, E
'#states' => array(% p1 ^- B- B, Q) N% i5 k2 P
'visible' => array(
# I3 N g0 o- k J. T) u ':input[name="visit"]' => array('value' => 'other'),
7 J1 ?6 H7 B6 S; Q. D ),1 |# H: @1 X7 ~& v" l: p
)," n5 }) p/ d7 u4 e D+ _
);
% e) {6 C: L3 A, o /*
9 q' P3 p) y4 c p& ` //表单元素“确认”提交按钮" B# H7 b& z7 r" }9 g
$form['submit'] = array(3 Q' h; @! }$ E* ^
'#type' => 'submit',
. P- p, \6 {& d: G. Z '#value' => t('确认'),( w4 k8 N. { h; k* Z8 x
);/ s1 ~/ o& K9 R8 ?" w9 i% `; P
*/$ I# W; y5 t* A# [( H* L1 N
0 Q# d8 ^( Z! G% h! `; x# M
//表单元素“确认”提交按钮,这里采用了图片的形式 ^! o, e6 h7 ] l3 s9 h {- _7 z5 l
$form['image_submit'] = array(, D, u+ k; Q6 U0 I- c& U+ I
//表单元素的类型,这里为image_button
2 D, G: s* D8 V* E' ]1 S$ r. ~. F+ ~ '#type' => 'image_button',
- ~( k9 q, z9 s, I
1 ^. j5 L$ E) [& }2 I" b& z' w0 s //图片按钮特有的#src属性,
h( P& _/ r# ^3 s$ \ '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',0 w; i! c y B7 d& w& \/ U
'#value' => 'image_sub',
) B2 D/ w9 w+ \2 { . B( K; a0 l" w" n- k5 a7 t( o
//为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
( B+ M5 V1 K0 o5 I '#attributes' =>array(8 `* _( f0 N) Q# o, Q0 o% r* U
'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",% [# [7 A ?0 k; H( P
'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",
! y/ M3 c3 K' G3 v" T ),, b5 c/ b7 L4 `2 S3 _
6 Y$ _! s- m* s
//为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div9 H8 Y) E% t& C! m
'#prefix' => '<div id="image-submit">',$ ^2 e8 M6 w# c% U
'#suffix' => '</div>',
) M# s% A* [; @3 v% a0 X) e' Q, y/ V ); return $form;+ n( y1 s6 R* b
}/**
! V$ k y8 J% i$ w * contactus_form表单的验证函数; i8 J$ ^1 w. t6 @6 Z8 z! ^3 h
*/( g* o: H. h0 K
function contactus_form_validate($form, &$form_state){
0 ^" J) n7 h B2 t //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。
4 J. F3 j2 U2 }0 A7 p) R if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){
, K& V% p" W/ \0 }2 B6 g form_set_error('mail',t('您输入的电子邮件地址格式不正确')); P" M2 [* N& u2 P6 V) S1 n
}. l: \8 _2 Z% p5 @% E+ h7 F% p
}/**
6 W* Q s4 H, h2 C! g * contactus_form表单的提交函数1 F" N. v. L' j8 |+ p
*/
$ P/ U& d7 _& ^- b0 s" G# kfunction contactus_form_submit($form, &$form_state){* ~3 H/ o. Z, x$ |: E5 P! W4 z
//把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。
* l* T& d W8 z7 k! ?. f" t; b' x* { $_SESSION['contactus_form'] = $form_state['values'];
. U2 @# f/ Z7 M //表单重定向到确认页面1 w3 ~6 ]) R/ {0 w
$form_state['redirect'] = 'contactus/confirm';3 k8 y) \6 Z) Q+ H, }$ T( t( k
% W& I( H3 z ]8 K* b
7 B5 T. R1 B& I& S& D4 ~9 L* Y5 E( H8 G, i
3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
: N* u1 M5 C5 @8 t1 u * “确认”页面的回调函数
. H: ?9 v( Q* C% B */
O+ P6 Y! B4 S. X/ Z9 q& Nfunction contactus_confirm_page(){
; ^; X4 ^% k6 W8 H, ^ F' A //我们为这个页面设置标题% o7 X! I4 U8 D
drupal_set_title('联系我们');
8 c+ w! L+ N; Q1 W! B& Y
+ e! r8 p& e7 x/ P5 l2 j7 T //这里首先作了判断,如果会话中没有设置contactus_form,返回contactus
+ [+ F4 ?9 @- @0 K$ Z: G; G. d' s if(empty($_SESSION['contactus_form'])){) S7 L' {( [% Y% U/ D
drupal_goto('contactus');3 F# J1 k6 {1 Z- g0 B# X! U% z. z
}else{3 O P9 l! r5 }" `
} $render_array = array(
' C0 t) L5 L) I- f# U, z! } '#markup' => '', 7 S+ `7 k- f& i8 u/ V: [- \, w% i; Q
);4 K% S$ X3 d( _9 x" j: a, K4 ~
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。, F. F6 Q4 C- C0 G! u$ x) ^( W
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));
) u( I) l& [4 U* l. M! m; M //Drupal7的页面回调,返回的应该是一个数组. H# o; |1 k$ C; s Y- }
return $render_array;% _ X$ S+ N' Y& r# |
}/**
o$ n+ c7 S# f' E' h, B * “确认”表单的构建函数/ d2 |+ f* `# H) D# Y2 W
*/0 L. P1 T8 X2 L4 [* k$ i* I
function contactus_confirm_form(){
) T( b% l$ e k. A; { //添加我们自己的CSS,用来控制表单的样式8 V) Q7 [- u+ [
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');+ N8 b* m: o: W0 F) v
//drupal_set_message(print_r($_SESSION['contactus_form']));
+ k1 Y. R+ y J% q' G9 P4 m% g //表单元素“姓名”
* |2 \% G( M1 r1 I4 w $form['name'] = array(
/ T# s9 v- Z$ C/ f: P+ s) B- [" l '#title' => t('姓名'),
* D4 f I2 L5 I2 \ //表单元素的类型,这里为item$ \# A+ J, o2 X _
'#type' => 'item', \+ f/ b f6 v/ u4 P1 b
//'#default_value' => $_SESSION['contactus_form']['name'],! j: d8 f Q4 m: e) B, H1 _
//表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,) D5 J6 M9 T+ \! {, g i
//最后改为#markup,才可以了
' f* ]3 h- ?* M8 K7 ]/ B '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
( h4 x; a0 @$ @: V* y7 R );/ j# ~# B1 B+ g3 [- L
' J; `% Z3 ]/ c0 x
//表单元素“单位名称”2 _1 A# ?0 D N$ `: v' W
$form['company_name'] = array(, f1 }7 Y7 \; }* z
'#title' => t('单位名称'),; o0 Y8 G' d! Y8 I) d5 T! X
'#type' => 'item',
8 P. c+ y& N e) w# ]7 Y //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。! }( u% n* E7 K6 b7 X9 `+ k
//'#value' => $_SESSION['contactus_form']['company_name'],$ V, T6 U# q0 u# G
//'#value' => '123456',) W& z; A4 K4 w+ F* l
'#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",1 ~) m! u' ]& v9 W' z2 v$ r
//'#description' => '123456',% t# H8 A: |+ y
);
0 I! V! `9 v( Q( S3 X$ q+ ]
D6 k! l! T5 b$ X //表单元素“电子邮件”
3 U/ c8 |% O$ q' r% u $form['mail'] = array(; H' Y) U6 H: N! ?7 d& }# i* L- b/ l
'#title' => t('电子邮件'),
: ^& b0 l. }6 F '#type' => 'item',
2 Y. W) |' L2 O$ j% e '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",6 O. x: _, D! f1 C' P* E( a- z
);( |/ E: ?& {, ]7 @7 [+ {
- c- H4 K$ H" Y" P
//表单元素“电话号码”
! g5 m$ l4 D3 k) V1 C6 [0 m $form['phone'] = array(1 @# E6 M2 E5 f9 x8 H2 f: k
'#title' => t('电话号码'),
5 z3 R7 F0 `2 [% { '#type' => 'item',
6 T- b4 ^! t% j. ~2 p0 h* ^ '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",1 s0 d/ O, e; J
);
% ]- r" Q) d5 u3 p! F: e5 ?
1 W" B A) n0 f% M- X* O //表单元素“邮件正文”
" X! Q' k( \0 ?8 X* X $form['contact'] = array(
6 Q0 e. H4 `9 x1 x' Z% V '#title' => t('邮件正文'),* j/ C3 t7 O& p9 _7 n# Z0 y
'#type' => 'item',
! L, X' v9 y& G: J+ v; y: X& s '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",3 `% s: p, w" ?1 y3 ~7 J/ r. P
);
/ U( T" U, v+ _+ o' w' v3 O 4 \ f3 X& k4 }
//表单元素“访问来源” [5 x B, {9 m- \$ I0 v
$form['visit'] = array(( q/ { S' _ q' t
'#title' => t('访问来源'),
3 _ k/ {4 Q( a( d( Y '#type' => 'item',
1 k# t4 q! S3 d$ J. e '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
* J# W Y6 p6 ` );1 H7 G; w7 O N
1 I9 [3 ]+ ~! \- X( \( e; Q. ^ //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。& f' G/ A2 P3 {! F9 l
if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
9 }+ r; ^! C( ] $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";
1 }& V' K) L" \6 X. G6 T } & x. ^7 T' A7 X( ?7 a" |
/*$ z2 H( {# N5 ?# c! U& q
//表单元素“返回”按钮8 r0 x' c" S7 I1 Z% g# T
$form['back'] = array(
' a: {& v9 B: o '#type' => 'submit',
( x! P. R3 x# k2 k1 V0 ^) _: O '#value' => t('返回'),& L3 h# b; w5 C* R5 F- n
'#submit' => array('contactus_confirm_form_back'),% B. w7 o* F1 m3 ~/ C: M
);
W3 q. Q) o3 I; s+ | //表单元素“提交”按钮, S4 S9 E4 Z/ X5 s8 E; W
$form['submit'] = array(
( t8 G2 v# {/ X) f% f, U7 s '#type' => 'submit',
# c M4 f2 Z1 ]) O8 e' E# U- n% b3 e9 M '#value' => t('提交'),
) s7 v! G/ j! @9 L+ S3 t );
: W7 I+ _8 _$ k7 b */8 M' f2 X# A: n4 w6 @3 C: ~3 e
0 ]( ?4 ?( j7 R7 q8 ~! J' Y //表单元素“返回”图片按钮% p. C+ V5 U8 V, Q
$form['image_back'] = array(- o o3 q9 u: d
'#type' => 'image_button',
! k' f; G! l3 `& W" H3 N% Q. w+ {1 u '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',
# ?" o7 P7 Y8 `3 e7 Z- Z, q- p //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back6 \ ~1 T6 Q- X
'#submit' => array('contactus_confirm_form_back'),
% H1 C) a3 N8 \6 D '#executes_submit_callback' => TRUE,7 {" H0 U2 K( J5 d7 @& P# N
//为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果$ f0 ]2 n; j* `
'#attributes' =>array(& ?+ A3 c ^% S$ r% F, I: a. S( D3 e
'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",) j4 E8 {2 a+ X4 g# G( A
'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",7 Z& `& W H0 F' C7 C4 I3 ~8 d8 |8 g
),( B3 d" P9 M9 ~7 _; [6 k( v
);
* M+ g2 w2 u" k( ]
- _1 t; ?2 j; @7 B //表单元素“提交”图片按钮
* Z2 {, n8 Y# Q* h $form['image_submit'] = array(. P; C B! w. @: `
'#type' => 'image_button',' J/ M4 Y9 h; }- W
'#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',
, R" C+ E M9 y+ s8 _ '#executes_submit_callback' => TRUE,1 S4 Q3 B: N9 ~$ v* B
//使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit2 R; b: }& F5 I/ D J4 B8 N' H
'#submit' => array('contactus_confirm_form_submit'),
4 ]$ k8 j1 O) m; v. H3 w3 S r1 C- [ '#attributes' =>array(
0 I0 i* j) z6 {3 ~7 p! ~5 P3 g# ] 'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",3 u3 U; n1 r, T9 ~( r
'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",7 Y& U$ j$ N$ V1 ?; d
),
9 H0 [0 ]& m5 U, ` );) W# p0 u6 w; W* @
" z3 O+ K# S" b6 c$ A0 b0 `
return $form;
0 n c) {, e/ ?}/**7 E; p, W% C, ]" y" _
* 返回按钮对应的提交函数/ [8 R H- U3 \1 b% }
*/% V8 U9 \: Y3 N4 i
function contactus_confirm_form_back($form, &$form_state){# C. M" X0 i" g. f6 J
//简单的重定向到contactus页面
; U2 Y! l0 H2 Y# X6 C. `* X% C $form_state['redirect'] = 'contactus';
" x3 d0 b- o+ U}/**, j1 n6 }8 f; M" |9 n3 I
* 提交按钮对应的提交函数
9 b8 _4 @# b( z5 g2 r- o3 w5 F */
3 X6 n( n+ n9 c( k' W' X, U' |function contactus_confirm_form_submit($form, &$form_state){
$ i1 V8 x/ }) H6 { $values = NULL;( ]5 W7 Y8 k8 I6 H. n
//从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。% C1 d* u* |& a6 k [/ X
if(empty($_SESSION['contactus_form'])){/ _' Q4 }; o9 r8 B# _ r
drupal_goto('contact');8 v4 W1 Q7 I T* E ^2 c
}else{( R A, |: V6 M: q) L, M6 p
$values = $_SESSION['contactus_form'];
; y+ m/ k6 B, Y! h' g unset($_SESSION['contactus_form']);3 J; @' W# A( P0 r W& F4 }
}2 } E. s2 P; [; Y6 K6 P
) \) f p. o8 F //收件人地址,这里为作者的邮箱; o' R9 C. z6 T! c
$to = 'g089h515r806@gmail.com';2 [' D! @" }" p- q8 K% g
//用户填写的邮箱地址
+ [# D s9 Y7 a( [2 {3 ? $from = $values['mail'];
$ i0 I* M# u/ S) @
) h" M- D2 i8 d //发送邮件
9 g. o M' Y ^+ p( H; N drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);
* r8 R E5 S# H5 { . x. G& r/ d+ V- B
//简单的重定向到致谢页面
2 f/ a% N5 K9 |) O) O" e $form_state['redirect'] = 'contactus/thanks';% I' [6 l) [# ~% M' R; Y. p$ H; Q8 R
}/**
1 q7 t+ N$ K. Q# e0 S+ f * “致谢”页面的回调函数' f! o! L+ @- @) ?. \6 G( P |
*/) y2 S) {$ o: }8 {2 w
function contactus_thanks_page(){% d3 U2 l }+ `2 W- [
//我们为这个页面设置标题
! _$ ]6 H- D q3 E% c5 w6 h4 a$ W drupal_set_title('联系我们');
* g: ^# e( r" x. r0 } $render_array = array(
% `* h! f) L) t. t; Z; g- U$ F8 ]% [8 o '#markup' => '',
" }( f; C+ L( i2 e ^/ K/ O );$ w0 c0 |9 `2 U0 b
//Drupal7的页面回调,返回的应该是一个数组
+ U* O2 o4 \' \ $render_array['#markup'] .= '<div id="contactus-thanks">';: z( C" J9 x- @" B
$render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
8 w$ H- ?1 }$ p9 c $render_array['#markup'] .= '</div>';0 ~1 g2 B# h0 G& d+ _7 u
4 \% F! b( |* X- p( H* V
return $render_array;, R' }( J0 i8 Q
}
' Q" M" ?& ^' K7 j' v3 {# [$ P1 f4 v J: z% f$ I5 A
& G% H: F( |3 n0 |. D: x4 w) a1 t- B! ^7 q8 n, _
& y8 Q0 v B U. L) k0 T
4 t+ Q1 }" M+ _' S. V3 _3 A @: e' g3 V
( O+ H, m# i0 l+ ^# }: b$ A
/ y& z# S1 [5 g- x/ m
% a3 y4 W8 J4 G0 B, F: @9 G3 i" r5 K( J& ~3 X1 h
% o" Y# g1 \* t5 _9 M+ x& B
. x) f+ {/ |. f- ~6 g
|
|