国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal教程] Drupal 7 中文教程 联系我们 两步表单 module 文件教程

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
' w: v3 M! I; i# b<?php' N  ?) H* \6 w: B; e: l. E
/**
6 _" o* E. ^" V2 F7 V( b" A * @file0 {# P% k4 Y8 q) v  ?8 {7 ]
* 方便用户联系我们.
0 t4 s: _" `  P3 s/ {" K */4 E9 C4 [" A3 w( C/ `0 p
/**8 z) K9 a. [9 f8 \
* 实现钩子hook_menu().% V. R9 S- Q4 b- }$ d: f3 {. o$ l) R
*/( z4 W( {, _5 Z& I* J, H
function contactus_menu() {
/ G0 Q$ C' s+ }  $items = array();
* `2 O1 S" m: ?4 D //联系我们菜单项) [6 ^. W! F( b# ]
  $items['contactus'] = array(: @0 D0 i7 F  O' y
    'tilte' => '联系我们',
/ ]# {  X1 P* F+ y4 y, n      'page callback' => 'contactus_page',  W) p  I* d5 U* x5 |/ j; i
      'type'     => MENU_CALLBACK,
) o- l% n" o7 O5 E7 U1 }      'access callback' =>TRUE,) C6 W$ [* g" r
   'file' => 'contactus.pages.inc',
  j2 p9 i  b) P( {) C9 V  );) S4 J1 W# w2 r$ o  v. `" O
//确认页面菜单项; m& C% ]4 V% r4 ~& K, `& }
  $items['contactus/confirm'] = array(2 N& H  N/ T# B+ Q
      'page callback' => 'contactus_confirm_page',. j; R9 q3 M2 E
      'type'     => MENU_CALLBACK,
- s4 L" T- z- R' N7 c' M- _9 p      'access callback' =>TRUE,1 M. e7 q, U$ o/ B
   'file' => 'contactus.pages.inc',, |& U( W. T. m- H/ ]
  );
2 r1 [5 Z4 E- p. l //致谢页面菜单项
! W" m& s+ C: O' `  p7 H  $items['contactus/thanks'] = array(" u4 u+ `! ^& J: a8 u
      'page callback' => 'contactus_thanks_page',
) `5 B9 R/ o3 p) F, ]7 I6 g      'type'     => MENU_CALLBACK,6 n5 e  D' F2 b  d$ \7 {
      'access callback' =>TRUE,  L2 t. k, r9 k9 Z3 B
   'file' => 'contactus.pages.inc',
' c# J) d  l3 Q+ r  B  );# s+ }! R0 \9 S9 \; _8 I! s
  return $items;
% R' F: C8 f, ]# T% B; R* s! [}( p) H% l3 h; e1 T5 Q3 R! _6 H
/**+ }! m9 z: P7 M- k" Y- T
* 实现钩子hook_mail().5 i4 }3 w# u- B+ c6 a0 |
*/* I( R9 `/ r- f5 s
function contactus_mail($key, &$message, $params){8 T( u9 `0 H' M" h; F
$language = $message['language'];3 R( N0 x* f" O! G8 d3 Q8 g
  switch ($key) {4 x" e. }' `! s
   case 'contact':
6 H9 G5 i" e+ D+ p: e  
% W5 P2 I* y- X: S2 V    //邮件的标题
5 R% B& a7 j) ~1 A- r+ _! T) ~" d    $message['subject'] = '联系我们';! C% [( _* O* G. ?5 Z2 b
Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分 / f* |+ f' c, o
  7 a: W& N4 x% a
   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源
+ T. G* d0 T1 a      $message['body'][] = '姓名:'.$params['name'];/ r+ H) q7 g3 \8 M4 ?
      $message['body'][] = '单位名称:'.$params['company_name'];: K/ g2 ]3 H2 s1 g/ {
      $message['body'][] = '电子邮件:'.$params['mail'];
4 W6 H7 t3 C6 S      $message['body'][] = '电话号码:'.$params['phone'];
' x( O: Q# [+ H/ Y6 q# t      $message['body'][] = '邮件正文:'.$params['contact'];
. Y( O* o# S, p6 m1 i# ?( T4 b, u   
! `, h  B' q. x! }& U" h. a      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']" B1 O3 {4 ]* Z$ s$ b; g
      $visit = "";
' T8 w' F1 R0 I1 W' ~- l      if($params['visit'] == 'other'){) _, L  Z- H5 ?, ]" x* @  }  v  c/ s
        $visit = $params['other'];/ z& _: _0 i. R  N- N4 S( N% Y* T4 S
      }else{
; l+ |" u. o3 E2 v" P! u        $visit = $params['visit'];
- ~' [0 O2 P3 l      }8 a7 F/ G( c( Y. D$ w6 p" G
      $message['body'][] = '访问来源:'. $visit;) u# f) I' }- a( ~- X
  }# v( l1 Q' ?: T; H) x
}, z- y& @, |, X# ^

: H4 x9 }! |: i* ^, E" ^* ]6 X2 Y% l3 R8 z
4 ^3 n8 ~! y$ [

* |3 b1 {5 L8 V* V2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调$ ]* A% Q* g. z: Z2 ?
<?php/**
- x- m. g1 d  u+ j: K6 q * @file
7 R4 ?3 L) r7 [# Q * 各种页面的回调函数.& {" `% m  N% I, H; I
*/
. T5 F4 i9 _" F8 b4 _8 c4 |( M; H
5 T# G8 m) {9 B1 O& i# h/**& @4 _- M3 W! Y" g9 g
* “联系我们”页面的回调函数1 U9 e$ P( B& p9 C
*/4 {& \4 b1 P! a8 b
function contactus_page(){
% K  a3 n3 a2 P( i$ [  //我们为这个页面设置标题2 Z& F% ~* G' Q
drupal_set_title('联系我们');& h+ i! c( D  f/ B6 S
" L' b+ |% v% r; r% z# }- k
$render_array = array(
: x, t+ p5 F, p5 b9 c   '#markup' => '',
6 p; a! \+ H5 U. { );
4 r! z: u7 l" _" c" F ( j3 h- ?. z7 m$ w3 n% T6 O
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。2 k8 p( L1 r* @
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));: A) s; @# {! k! j6 `8 ?4 U) X! i3 k, t) @
2 U: v& u5 U, t
//Drupal7的页面回调,返回的应该是一个数组
3 r' V4 f0 q! {( i return $render_array;
, U) s7 c% o0 Y9 \+ x" U" M" [}/**6 t1 F( f( u1 ]5 ^' ]! N
* “联系我们”表单的构建函数; @( z' F) F! C% a
*/
8 x9 v1 H( S0 ]2 y/ C6 \4 u+ dfunction contactus_form(){
& ?' h! h2 q  w# j; q  //添加我们自己的CSS,用来控制表单的样式- M  Y  V& P2 B. `, e
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
0 ^1 b- |& x! [/ n$ W3 {% g
7 d9 k) n3 }: w' K2 \  //提示信息,默认为markup类型。
6 D+ l2 ^# a/ s* [ $form['tips'] = array(3 x* X; z4 f' x+ s" t$ W4 ?
  '#prefix' =>'<div id="tips">'," r( ~/ f; X* i& e
  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),/ I4 b1 ]* g% X- w  K# M% e
  '#suffix' =>'</div>',- t  f7 _8 H. ]1 t- k. c( M2 _! U# t
);2 Z/ x' U) M# T# A

. n9 V$ _  `4 l9 b/ H3 k8 p //表单元素“姓名”0 ^6 P. T+ {: v/ f  m6 y. i
$form['name'] = array(
3 [( p/ e- [0 g2 Y% v, T# M   //表单元素的#title属性,对应于实际输出中的label
. s* G6 s" p" v! ^6 I  '#title' => t('姓名'),$ C) {* F5 ^( c0 u
  //表单元素的类型,这里为textfield. v, O! _! I+ c
  '#type' => 'textfield',6 ~6 M3 z5 N4 s( W2 H2 T* H
  //这个表单元素是必填的
6 l- W' w8 K3 A% X: h  '#required' => TRUE,- O7 f. w- U+ ^4 O) J- U# A! f
  //表单元素的默认值,这里使用了三位运算符和isset进行判定9 g# i" \; \5 g4 {/ E: j
  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
" U! v. c3 c! E, r  //表单元素的描述,
9 D6 {" @8 J# O2 {% \) O- Z5 J  '#description' => t('例如:周星驰'),' ?8 }- }, m4 o  z
);+ K1 K) Q' J9 `0 O+ O) B9 @
8 C. l* a2 V  @/ P
  //表单元素“单位名称”
6 L4 D3 ]' C0 S, n $form['company_name'] = array(, U3 E1 u. ~4 f# j( z9 k# q
  '#title' => t('单位名称'),
7 e, N. Q8 A3 K# R: _6 R7 j  '#type' => 'textfield',
- w: I+ Z& [. K/ G2 Y3 P  '#required' => TRUE,
) O3 b- \" |5 O/ ?6 D  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",2 b! G3 z2 z2 k( m" V$ x0 o
  '#description' => t('例如:北京无名信息技术公司'),
8 D0 ^. k+ |8 O. _ );
: W; C7 j2 N. R2 B  T3 {2 a . c  u# s. p3 `% z! \* @
  //表单元素“电子邮件”
: k# E- W- [. [6 h/ f3 U $form['mail'] = array(, n# s5 _7 F* u* Z# c4 {, x- |
  '#title' => t('电子邮件'),; U. k$ G) ~& }1 v2 A# |
  '#type' => 'textfield',8 B) e2 v/ J( n' \$ j, q$ K4 y
  '#required' => TRUE,
5 A) k& m& Y0 F+ }7 _# \7 ]2 ?  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",/ g8 Y5 G) p; [+ k! A6 k
  '#description' => t('例如:info@example.com'),
" p2 y9 e, N/ @3 I9 F6 v: a );
7 b$ U, O: _1 C. T ( }' B% d$ U  n, g) B' d' b
//表单元素“电话号码”
' n$ \1 ?6 {+ l) {3 v% q $form['phone'] = array(* w3 V# G4 l6 ?$ {) y5 e
  '#title' => t('电话号码'),! V9 j# Z' E) q8 K; G* T4 I
  '#type' => 'textfield',/ l0 \& c3 f2 u' o, I0 G) a3 G
  '#required' => TRUE,
4 J( `! \3 J  u& T  d  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
0 X9 L7 A5 Q% Q# V& B$ w  '#description' => t('例如:010-88888888'),
/ A: E% X4 I4 {5 y );
: w$ e" ]  r+ d 1 L! F6 B$ ~2 _! C+ ~+ {( h. p
  //表单元素“邮件正文”, @, ?* q, H" T
$form['contact'] = array() A1 O; C8 k1 x  e' h
  '#title' => t('邮件正文'),% x; N) K! c. O9 V9 B
  //表单元素的类型,这里为textarea
& Z" E. Y" |, f) M, ]* Y2 T  '#type' => 'textarea',+ S" `7 U2 q3 o& a! ^' i! T/ q! c
  '#required' => TRUE,$ i6 E) Z1 o4 E5 j
  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
% |5 Q( E, b. `$ s% a );5 O  ^) C6 b& }1 F' l  O
: V& q- U+ f) ^# R+ P
//访问来源的可选项
' I8 u- E3 k+ x3 b. o; x) n $visit_options = array(
3 W$ {9 o% X+ n! X2 v# I  'baidu' =>t('百度'),
: m5 \4 [% r' C8 t! i, I  'google' =>t('谷歌'),+ U8 c, F2 E$ q
  'sohu' =>t('搜狐'),
+ v& B% q, n* q1 T. Y, V  'other' =>t('其它'),: z5 v' `) I" f
);  O# D0 ?* c8 _, h" y
//表单元素“访问来源”* x/ ?1 H* A. Y1 t/ I( w" \8 L
$form['visit'] = array(
& o) f! d; K2 a* V; }! J  '#title' => t('访问来源'),
5 k. [! o, {1 r" [& H6 J  //表单元素的类型,这里为radios* k3 z1 i1 a! g1 F* R* y) i; v
  '#type' => 'radios',9 m9 ?% G4 _- \
  //单选按钮的可选项。
/ r* {0 c# S: P1 k" p6 }  '#options' => $visit_options,
- l8 }7 }) k% M, M" x( W" A( r( w1 P  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",0 m/ F+ |& ?) K
  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div& w, p* ?0 F; P7 H& k. C0 p  B6 u
  '#prefix' => '<div id="visit-radios">',2 E3 S  a9 Q$ Z0 a& _9 y( m
  '#suffix' => '</div>',6 B3 o0 f& Q& j! K! p5 N1 H7 b
);" N$ E% ^- C$ l) Y4 B+ F- `5 G  j
- d9 q6 e' m/ p1 M0 n6 w
//表单元素“其它”,它依赖于表单元素“访问来源”
. R: ?( \. \. d/ Z  o  \8 c! D $form['other'] = array(
$ N& Y$ x7 i. ?! F4 X3 ^7 I  '#title' => t('其它'),
! l  ^0 U0 s. l8 |3 c0 I  '#type' => 'textfield',
" O; V; t9 o' A9 z$ x  G3 B  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",8 k0 R) j: I' J5 g
  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来" U& G. W) `  i
   '#states' => array(+ d* U) v5 ~2 J7 m8 W$ K  S
    'visible' => array(
; P  ]1 [2 `" X# A     ':input[name="visit"]' => array('value' => 'other'),
9 w: J2 G" a, i: A# M0 y1 R   ),, a! Z" b- p8 I5 H- u% y5 h" V* y/ W
  ),
2 d/ F2 q: |1 `2 o ); 6 ~: K9 D) j) o7 B0 e
/*  |8 X+ L) X% Y+ }3 T9 q, m2 b' x
//表单元素“确认”提交按钮6 B+ c8 U, o3 U
  $form['submit'] = array(# |2 C1 p; n/ G& ?4 l7 Z
    '#type' => 'submit',
" M( w. U  B9 ~% _    '#value' => t('确认'),
6 B* e( r0 ?! I5 s3 |  }  );5 _) W% ~8 H6 B8 V! q, K5 f, |& n+ R
  */
, j' m' \$ t  Q  A8 w : @0 q9 ~" k; }& d
  //表单元素“确认”提交按钮,这里采用了图片的形式9 @' f7 v  ?3 V9 N6 W. p0 G
  $form['image_submit'] = array(% ]  S: \8 J4 }5 ]1 j1 p
   //表单元素的类型,这里为image_button% q& z5 W  N2 e5 X, k
    '#type' => 'image_button',
. s6 I% F  F# \# j) i+ X- @& t2 i  
. u* `$ Y: Z$ A  q! Y( N' n9 U: ~  B  //图片按钮特有的#src属性,
2 \7 ]5 d; ?; X! s    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg'," I$ M4 F+ z# I9 K2 L  |2 {
    '#value' => 'image_sub',
( ~9 _* z) _' C" e  
8 _  Z3 y9 ^; R  [& A  i. x  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
2 R. M% @1 A: [$ c! E    '#attributes' =>array(
; v* [3 z2 k- l0 X4 ], a      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",
0 ]" m$ f, Z2 z3 d5 I, X% O      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",
4 g4 {+ j$ T' X6 s    ),/ k$ S: a, C& D: w8 R
  
4 R" [3 A& t: q6 {8 I# R! p  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
) f5 J' n" w0 A! f    '#prefix' => '<div id="image-submit">',
* x) C3 N1 |. R, H! N    '#suffix' => '</div>',2 ]0 f7 q' P) E; V6 d, I% X
  );  return $form;' w" u0 r1 b* }* Y: c  b7 `
}/**0 C5 R0 a0 O4 k4 |2 i
* contactus_form表单的验证函数* C2 ?! y! S' T3 Y1 l9 n; N
*/6 o$ b" j% J5 \  y+ g7 {
function contactus_form_validate($form, &$form_state){3 }, N2 {/ [* L: {4 [% T& s
  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。$ p1 g9 ]7 O6 i" q4 P
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){; H9 {% ], w6 s% ~& F. ]
  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));% ~/ J% A* O. D: f& R( {& W8 p
}' O) ]  X; F7 r( }
}/**
6 s, g- h8 _/ s* Q * contactus_form表单的提交函数
. x: U5 B4 E+ s9 t" r */4 C7 v9 l3 P+ e- Z$ P2 f' ~
function contactus_form_submit($form, &$form_state){
/ z3 E! c7 P6 r. r+ u6 Q) \  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。# M$ p  r( [0 }5 B/ F$ t1 t. i
$_SESSION['contactus_form'] = $form_state['values'];% t, Y+ i3 ~  P; z$ [
//表单重定向到确认页面! f5 Z# F& n/ ^( F) X' D& U  L5 k
$form_state['redirect'] = 'contactus/confirm';
7 q6 D! ~8 O( ^) O6 \! P
$ F* k" d! p2 p& v4 ^0 P7 Z4 ^. v/ T

- b1 {8 s; Q$ K- N8 f9 L3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
2 V6 ~( `# N: q, Z * “确认”页面的回调函数
/ V. j: {# d6 Q! D. m) |" F& p */+ O- R, d3 {/ v: D
function contactus_confirm_page(){
, Y: e7 j& G7 D0 m* x3 [( C  //我们为这个页面设置标题; g) \6 o, M# L* y+ l! U* `. e, E6 j
drupal_set_title('联系我们');5 F+ W1 n* Y; Q. {8 l

. Y2 C  R. w$ T0 T5 f //这里首先作了判断,如果会话中没有设置contactus_form,返回contactus0 T5 d2 _: X  R0 Q+ j/ a
if(empty($_SESSION['contactus_form'])){, `4 l: C: l5 ~. p& ]
  drupal_goto('contactus');
/ R  z' x5 G* H( T; D3 t9 T% t" _ }else{
( A$ f, e% z6 e; I9 I1 ^9 A$ z } $render_array = array(
1 E4 J5 `3 i, \8 l/ D   '#markup' => '', % P( [) b2 d3 {5 t: i
);
4 D# B/ C; P& Y7 ~: x5 q0 f' l9 L //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。9 t1 U( F6 X9 x" z' f% \
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));/ L$ S3 @& p2 \3 I$ z
//Drupal7的页面回调,返回的应该是一个数组8 m9 n& l' m- f# }$ \6 p; ^" F; c
return $render_array;
+ r" C' @% y, X& h/ V}/**0 l0 [" h, H2 P& ~. i0 j+ I
* “确认”表单的构建函数8 N+ E% Q; Q# X( R
*/+ x9 J, g2 R/ V2 b$ D" A
function contactus_confirm_form(){& m4 [2 `: `+ w' ?) d/ R
  //添加我们自己的CSS,用来控制表单的样式2 G/ N. Y' S7 c8 _
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
$ t. S% C% u+ J$ L //drupal_set_message(print_r($_SESSION['contactus_form']));) \. L$ |  P- T$ `3 `
//表单元素“姓名”
+ j/ \7 X- a9 `" T" }3 k# M $form['name'] = array(
8 f% U+ |$ q: a- @  '#title' => t('姓名')," T5 Z8 t6 y6 e2 h4 X7 K7 ]) i
  //表单元素的类型,这里为item
( b# h0 G3 O& S# b3 |4 P  '#type' => 'item',
( }( Q2 P3 h& ]! I+ c  //'#default_value' => $_SESSION['contactus_form']['name'],- z/ X5 U& E; [5 r1 E
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,
2 ~* D( Z* Y( ~' t  //最后改为#markup,才可以了: _& R8 M. u* U9 q
  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",) O/ V' P3 `5 U3 M( [$ Y5 Q% h
);
' E' N1 C( s* A( c( ~
' q+ B9 H9 h9 k' U7 M4 R  //表单元素“单位名称”
# s# b& |) c- Q+ g: T: W $form['company_name'] = array(
) ?. p" I5 Y! C( E$ g  '#title' => t('单位名称'),
, ~5 M% |9 V/ @  f. A  '#type' => 'item',0 W1 S1 q* Q2 ~: Z9 V
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。- Y: ~% d! s( k: X
  //'#value' => $_SESSION['contactus_form']['company_name'],9 P6 G7 A/ h9 j. _1 D
  //'#value' => '123456',# s& z2 b% X3 I: e. H: a5 r: u
  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",! [+ M+ |) c9 L* m
  //'#description' => '123456',
# }2 i1 n% h' H7 @  ~ );
! u+ `3 E" o+ w; ]% v7 {
1 b6 p/ m3 N# a! Y. W) l* ?' ? //表单元素“电子邮件”
  P" n3 t6 I% m( N5 i% l $form['mail'] = array(  Q0 F7 h6 l/ b5 U7 M' D# j& O2 j
  '#title' => t('电子邮件'),
0 d6 L1 v* R% |: _8 z  n  '#type' => 'item',
/ E) K( h! ^7 S  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
- S/ m2 m, U+ y& |, N# ^5 c );
0 D' A0 A5 y6 e) H% v$ i" T" | 2 N0 y4 m. K' r" y- X7 z  {
//表单元素“电话号码”1 a. C4 y+ k/ w; ~! R# J7 J
$form['phone'] = array(
* C0 C( k6 l# p  t+ a& k  '#title' => t('电话号码'),
4 l! e9 a  a- G% S% l  '#type' => 'item',, b5 L! W: L/ l% F: I+ h6 z  \
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
4 _) U; c( G3 y' { );, n: F- c& f' E

, F  r2 G5 R( G( _/ d4 [9 A  //表单元素“邮件正文”
, g$ w; E4 I0 J $form['contact'] = array(# d; j1 ]+ w( c
  '#title' => t('邮件正文'),
( N/ z& q( l: L/ H: N' f  '#type' => 'item',3 r: S9 \- r; z; A, I0 u
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",0 i) H" Q# g( \
);  u! c' o2 n3 [; Q% G" l5 u
" s8 Z# _; a) c! P! P
//表单元素“访问来源”( W/ r0 y2 t, P7 j. a
$form['visit'] = array(" |1 s* t- i4 v3 y$ F" w- d
  '#title' => t('访问来源'),
. t, Z) @3 r! n  '#type' => 'item',
1 d1 Q4 w, n1 x  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",# Y& m2 T% a6 i# k; C$ H4 d
);) S5 x. \. V) \- [6 S
' x. q( V9 [% q
//如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。
, X1 A4 ~1 W4 A* m/ X  [, ]! F if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
0 O% k( t# l* E4 w6 I8 [; ~' u0 l6 }  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";7 P1 K" l( X- ?" T0 J
}
( D  |  |' r" }. y. [ /*
' C/ P7 M8 ^1 m9 G //表单元素“返回”按钮- m/ h( b; Q' e: S0 W1 K7 M6 M
  $form['back'] = array(
" A* s' I) C4 i! f    '#type' => 'submit',5 f4 g8 F) |& T0 x- B" ]
    '#value' => t('返回'),
7 J4 z- t+ z/ D" q    '#submit' => array('contactus_confirm_form_back'),
; D) i& H& e6 f$ q% p* Y+ p  );
# U% B, K: Y, Y7 R //表单元素“提交”按钮7 h2 A& f8 L) `: V+ v* q
  $form['submit'] = array(
- t' y& e5 @4 h. o    '#type' => 'submit',& W$ I" H& y9 n4 N5 ^  G
    '#value' => t('提交'),
$ Y2 S. z& p; m% b4 ]6 Q' ]' ?* e  );
7 y" i* p4 |+ Q1 q7 o* M0 T  */
% \5 z1 W" g  N+ K/ _' y/ g) u- b- |0 {
2 l  w9 ^6 g5 B6 B7 t; t9 S  //表单元素“返回”图片按钮4 d9 M% _- [, t1 `/ P! |& z
  $form['image_back'] = array(3 X- |) U$ e1 L) E; d: ]4 Z
    '#type' => 'image_button',
' \6 P% n- {5 f  [% o$ e  I$ ]    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',9 Z+ C8 @1 d  N: ^( p0 u* q
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back: Q% w# [# r/ l
    '#submit' => array('contactus_confirm_form_back'),9 L) Z/ M" R: K9 [0 N
    '#executes_submit_callback' => TRUE,
3 {6 _7 w, d  a$ b0 b8 w7 {! a: k  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
! P: N4 _! h$ u2 Q    '#attributes' =>array(6 x, ~' V# ]" x. b9 a1 F- W3 l
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",/ ?. y* D  p) s6 i
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",3 C; |  T6 x# q  c; \, ?8 n
    ),, T# O3 o+ c: ]5 [* H
  );
" H6 ]/ B; J! S6 s- ~
& ^9 Z! B% k2 Z$ Q" q# B& W9 B  //表单元素“提交”图片按钮
; u6 A4 T, X; R( n9 o  $form['image_submit'] = array(2 E0 z: P+ @. L- u) u
    '#type' => 'image_button',
. Z: p9 C* f. D, `1 d& b# ~    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',3 t: M, q3 v! s7 b  Y6 R
    '#executes_submit_callback' => TRUE,8 m' z& M% m6 J; C# Z$ d$ w
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit
* a3 }: _! c1 B+ h2 G  k5 |% d! d    '#submit' => array('contactus_confirm_form_submit'),
  m$ v4 \; F# N) z9 f9 o7 u! x+ u    '#attributes' =>array(
7 A: O# O! `% c6 g* s      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",
) _7 y" r" h: r1 l1 e3 @- x      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
  S5 x2 b$ T( D    ),! k5 ]( ~8 j8 g+ ?; _& e, b
  );7 F5 l% x4 Q% t7 A0 n; P
  
9 a: p$ k" k' i7 Z, w3 q  return $form;7 [  o' ^  _/ u: W5 o5 Y, ]6 M
}/**; L. q& b. n2 a6 n+ p- G$ B9 Y; m
* 返回按钮对应的提交函数
; }9 ^7 e: z8 p/ o8 K# H! |+ z */
# d& |6 \& M5 i1 g( E  ?4 Efunction contactus_confirm_form_back($form, &$form_state){
# R: L& z, w8 Y# l% I' b  //简单的重定向到contactus页面
4 I& b* c& i$ Q# `' [ $form_state['redirect'] = 'contactus';
8 O- }; |& V% B& \, {7 ]}/**
5 k  D7 N4 K% u. g! j% a * 提交按钮对应的提交函数' i# a- {. }- l
*/, ?0 O6 Q6 o# ]1 g% m% e  j
function contactus_confirm_form_submit($form, &$form_state){
. D- N' A3 i! s: P $values = NULL;
3 H" ?5 _6 Y- f% [7 H) H //从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。6 ?" ?8 ^3 w' \% `! b6 n) Y
if(empty($_SESSION['contactus_form'])){
3 l! [: J: ~3 V# s2 a, G" U  drupal_goto('contact');7 \% _/ g, N9 Y! M& h% u
}else{* x. ?9 P  l' v: [2 d
  $values = $_SESSION['contactus_form'];* l( Y! ]9 l6 ]0 Q
  unset($_SESSION['contactus_form']);
& G7 b# u' e$ Q$ o }
9 U/ V3 \  W; G$ J  D & z5 P( p. T2 I
//收件人地址,这里为作者的邮箱
0 }4 x3 {: j. |4 |& g4 H $to = 'g089h515r806@gmail.com';
! D6 w0 J; Z2 v! j9 z //用户填写的邮箱地址
/ B1 J9 `- M: j: z $from = $values['mail'];2 _/ ^! U5 J" d' G# u4 l

  J/ g7 g, h, t4 L# `% z //发送邮件
% J6 D4 m* G' ~2 b0 u' I drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);. J" {" ?8 R# r" D6 _5 |
4 M; g6 @; a. K8 ]  h) z7 O  Y; N
//简单的重定向到致谢页面7 v$ V& A% m$ X+ a* c6 `$ \
$form_state['redirect'] = 'contactus/thanks';
2 t& h; C% ]  h6 i. }}/**: z1 u7 C3 ~; m8 j/ J
* “致谢”页面的回调函数
, @; D" C6 |; D' b */! o0 p6 i4 M5 T
function contactus_thanks_page(){, \; u8 f0 d3 ]5 {! c
  //我们为这个页面设置标题
) |& J% u( ^. @% n$ x$ { drupal_set_title('联系我们');2 D2 j+ p6 O/ G- t
$render_array = array(- Y9 F& n4 W8 }. A7 O
   '#markup' => '', " v* a* ~7 O' M, M
);8 W$ F: N$ ~5 d, `
//Drupal7的页面回调,返回的应该是一个数组
4 b7 \1 F4 x2 ?* f" S, d0 {* N% Q, z" u $render_array['#markup'] .= '<div id="contactus-thanks">';5 X2 I* A; K. s9 a$ E0 M% Q
$render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');) q& K8 I6 B8 V
$render_array['#markup'] .= '</div>';
( @" w4 p# {! f: V ' R3 k! s# q, M; s
return $render_array;
3 u1 l. r8 j! @4 A" V}
% d7 p" s4 B/ M$ q7 r) V0 Q0 t$ x  X
) x7 `4 h+ I. L' P" V' i
9 n. A" x/ V4 a- ~5 Z/ n  m) W$ k
; V" @- e9 W$ A/ S: Z) e: U6 `2 A

3 d( b; M2 L# K4 J% u7 r, @* P9 n/ g4 b+ Q( m0 l

  W, u8 T( p  o3 y) f7 d! z2 i# G) f. j2 ^3 l4 N
% P! u: }. e& z4 j* L# A

  _% i2 a6 {  `7 @0 y# H* W9 x4 A# P- n
2 G1 l; O4 r3 h6 |( h. K

|2011-2026-版权声明|平台(网站)公约|DOOOOR 设计网 ( 吉ICP备2022003869号 )|网站地图

GMT+8, 7-16-2025 01:32 , Processed in 0.896212 second(s), 186 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表