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