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