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