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