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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
9 [" t1 \. r$ v* L0 {<?php
+ S. q9 p) i" s% N7 y2 i9 i1 M/**
+ d7 F4 V# ^, f1 e$ q * @file
; q% Q7 p& e5 u; U8 i1 w5 R$ F * 方便用户联系我们.+ `, J% C2 S+ }( n1 Q. ~7 e+ [4 s
*/- z9 o1 z' f( L5 B9 x  _
/**
9 l- m2 U6 P. r+ _; H1 f2 e * 实现钩子hook_menu().
3 h$ w. s0 [1 H, O, Z8 ? */0 L: K8 \. |3 e5 Y& ^: M2 O
function contactus_menu() {8 j8 \2 h8 w+ L0 C: d, X" P. v3 D* J* u
  $items = array();2 Y2 o! w- H9 A+ l. k. f
//联系我们菜单项
* L, S. \* t8 U& j; h; J  $items['contactus'] = array(- D7 Q9 H8 f$ P
    'tilte' => '联系我们'," }& D- C  B- e  e1 \/ x$ D. G% A
      'page callback' => 'contactus_page',  c& S, a0 U$ ~9 n) @0 l
      'type'     => MENU_CALLBACK,0 c, e- N3 M2 x7 h
      'access callback' =>TRUE,. d  e; T& v( e& f# |" D! y" B: l
   'file' => 'contactus.pages.inc',) `0 r& c: C3 b4 {  E) }
  );
% |5 O0 f  {; Z //确认页面菜单项
/ d/ I3 a8 q4 a: s$ t  $items['contactus/confirm'] = array(, |" A: z7 l4 i6 G, ]9 ]6 t
      'page callback' => 'contactus_confirm_page',- G, f. B6 \2 M+ U* ~% I7 I
      'type'     => MENU_CALLBACK,
, W4 N+ p/ M8 o% \1 O$ r      'access callback' =>TRUE,
5 S2 t: {8 t. W7 I- t2 ~   'file' => 'contactus.pages.inc',5 w! p) f. o& ?+ J
  );8 |$ K, G8 y! i$ [; J( _, g* e' [
//致谢页面菜单项
) O* \# l' b& |% E/ D/ \  $items['contactus/thanks'] = array(
9 f" }; ], y" l      'page callback' => 'contactus_thanks_page',
, M$ g. O+ Z0 B6 H      'type'     => MENU_CALLBACK,
$ [$ o  ?+ @2 i) Z! a2 Y% B6 @6 Y      'access callback' =>TRUE,: M6 R8 M8 p  ]: X  W5 B5 T
   'file' => 'contactus.pages.inc',
; f9 {/ D% I4 j) Q) r& n5 C; A  );
0 B/ y5 W+ ~& M* A& c8 g  return $items;0 W+ l# D1 p& I* y* B+ E& L+ `
}
; P% W! \0 Y8 q; A& J/**
$ c% M' ~8 R3 `' @ * 实现钩子hook_mail().. A0 E% S! b% i' r! N4 b8 D
*/
+ U% ^: x" n+ S/ d/ {% R1 Pfunction contactus_mail($key, &$message, $params){
+ [* g; m; L4 f. m; n3 V $language = $message['language'];. I! K+ u" S. g! x1 R
  switch ($key) {3 |5 S% ?6 G( V0 y, q: [5 y
   case 'contact':
% J8 r& Z2 {0 L  7 H% }& O% o8 k, @# e
    //邮件的标题) N, O& ], q3 ^9 |5 i( ~- b2 Z
    $message['subject'] = '联系我们';
5 f+ F0 X8 q6 S/ v% g Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分   N  z' q% v7 n5 S5 e
  
$ B) u$ c, m0 s   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源9 o& v* r/ |# p) T6 K! v
      $message['body'][] = '姓名:'.$params['name'];5 t. @1 E  q  G8 V  R( M
      $message['body'][] = '单位名称:'.$params['company_name'];! M- r% r- L2 @! }* {8 `
      $message['body'][] = '电子邮件:'.$params['mail'];
8 b" t8 p3 D! F( s( E  a      $message['body'][] = '电话号码:'.$params['phone'];
9 ]! O7 N2 a7 y9 N! p. l      $message['body'][] = '邮件正文:'.$params['contact'];
& c7 D! N1 a4 ?   
0 A% ~% b5 R' U/ Y4 j: M      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']1 I) h- t  q2 ]+ r2 Q  X+ M
      $visit = "";. A  K* j) C& n+ n) G) u7 H
      if($params['visit'] == 'other'){; J9 E& W% ?$ W
        $visit = $params['other'];
- K; f( ~) z3 G9 w+ ^5 Z) X      }else{1 l3 w0 k- W; Y) |) U, u
        $visit = $params['visit'];
1 T/ T0 U9 L; _( t9 m4 T: V2 q      }
& n1 Y7 j* \0 Q! z; a      $message['body'][] = '访问来源:'. $visit;& ^( I, t& Q+ Z# U4 T* J4 K
  }1 w- O, R$ m( L6 ]
}. c* Q- h$ L: z/ i/ z5 }6 {  W& l5 ?' O

' X/ s5 x. W$ T& @, T. d# @  \9 G$ w/ s

% E4 r$ F9 W- o+ v! ~0 x
; w; `9 b& ~* k7 L2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调
' R& A& `/ a9 f/ J' Z. p' S$ Z% A<?php/**! j9 H9 F# f6 b9 J/ u+ f( j" \
* @file
9 `  ^( h# O* N4 I7 r) L * 各种页面的回调函数.
6 W( k) i! R  G% Y. L# F */$ Y6 {$ ^) R4 _, `+ S, \+ K

4 B, p  I4 E( e# Q. e% L( U/**
, `- B* Q6 H0 t& N( E * “联系我们”页面的回调函数
$ k3 _" J- X% A/ Q" D9 ^ */
% Q. c; I" X  o2 q: ]function contactus_page(){, `; ~, T, M( N' m( Y
  //我们为这个页面设置标题) J# e& \0 j( U' ]& m
drupal_set_title('联系我们');
; {1 ]- ]. g; _5 D) y0 P! w/ U8 r - f% s- I3 ?5 l' A0 @5 E
$render_array = array(
* c1 q6 q4 J, t# m; j! X  E% L   '#markup' => '',
* ?, \$ x* N! T8 K, y );8 n& Y7 T9 Z% g3 E
% x- X) U# [4 f& Y9 {/ b. X
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
* x" O- q4 t$ X1 }8 T3 ~. T. f $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));$ d4 Y5 g! P4 C8 X8 v7 l9 E5 t& N

2 ?' o9 J" c- ]' x( j; I1 u0 s' X //Drupal7的页面回调,返回的应该是一个数组
' O9 b$ T7 H9 B8 a0 J& x* I return $render_array;* I8 L# }( \6 H+ _% L
}/**! P, x( y) G& {; N( ?' v! a( d
* “联系我们”表单的构建函数
" n: N/ x  Q3 [5 A' g4 o6 Q4 s$ j */( l# D; C! T/ o  w" O
function contactus_form(){# P4 `& [8 j8 s7 E. ?( O( \
  //添加我们自己的CSS,用来控制表单的样式# {& f5 Z# O8 v- K
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
& Z4 x9 y1 J4 K: l: E
: ~( X  T5 n$ |1 r$ A' c  //提示信息,默认为markup类型。7 ~) S! Y  ^# Y/ ]' _% x! U
$form['tips'] = array(
* ]! l( S; ~2 y. e  '#prefix' =>'<div id="tips">',( |- U" E" Q7 \% h5 d
  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),1 I% m: |3 `: O9 v0 A9 S
  '#suffix' =>'</div>',6 w& ?) a9 O4 l$ q7 R# H* ^
);' h/ [' i. Z# Z5 ^
- Z9 g! |! e; V! t  [6 x4 u: r
//表单元素“姓名”
3 J7 M" r  w# z $form['name'] = array(, j" c- t- P, \$ e, o9 N1 r
   //表单元素的#title属性,对应于实际输出中的label( B) Z2 }7 q8 ]5 a( J# ?! s/ |$ D
  '#title' => t('姓名'),
+ n- `4 Q' X6 B, c# O. P. s8 d3 F  //表单元素的类型,这里为textfield2 ~7 n& M) o5 h6 Q  ~+ z& V
  '#type' => 'textfield',
5 [$ ?& E6 K3 `  //这个表单元素是必填的: Y# i8 ^$ s/ i) Z4 R/ S
  '#required' => TRUE,
" Z8 h, e3 O  h& V! o7 O% n  //表单元素的默认值,这里使用了三位运算符和isset进行判定
+ a* N; c, ?# O0 |. R  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
) Z- l% Y$ l0 J. W# e  //表单元素的描述,
# b& l1 s8 L* t# {5 P: N# C2 S  '#description' => t('例如:周星驰'),
* }& q* [3 V9 G7 q1 [; _ );  S3 r0 A+ y* G. W  r8 O
( E8 U8 v1 W% E5 @9 T( ]+ b
  //表单元素“单位名称”
# Y! ^+ I' T, K# c7 Y $form['company_name'] = array(
; I' h3 M# F6 x1 O1 n6 @* F  '#title' => t('单位名称'),. A) L- H% r2 T% o7 T2 Y8 [+ Z, V
  '#type' => 'textfield',
& D5 b- P+ U5 w8 b9 s6 E  '#required' => TRUE,
% m1 i0 M& J. j. r2 M8 @# {# ?7 _  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
9 j/ K# x% U; h1 Y$ ?' V  '#description' => t('例如:北京无名信息技术公司'),
3 v3 m+ _( |9 C& {6 e& X; N1 c" g );
6 e% [2 b- R+ U4 a7 u
, D$ {3 T- ]7 d( p4 U8 T  //表单元素“电子邮件”
% D7 |, [" T) r% b5 d9 y7 V $form['mail'] = array(- P0 s- M; \/ ^7 [
  '#title' => t('电子邮件'),
4 ]. v3 U7 N6 f  '#type' => 'textfield',
. |' j4 A3 E7 z: X7 Q- v  '#required' => TRUE,
3 n. _8 o0 _/ p  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
2 ~9 k! V: Y1 X; J  '#description' => t('例如:info@example.com'),( K) ]# ^9 s( Z* i7 K
);
0 H# A( g3 b: L1 c. C+ Q
  B3 T* g( r' e' w% E //表单元素“电话号码”8 h" W) e' C9 |( K# q9 P/ z& g
$form['phone'] = array(
* e$ {3 m7 x1 t4 ~- n  '#title' => t('电话号码'),( _) f' v3 c" w
  '#type' => 'textfield',9 S4 Z, b) j) K$ K/ C
  '#required' => TRUE,
+ I$ S6 y' A8 r. M. p) j$ A! F  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",3 |/ Z- l. `/ r. k" {# _
  '#description' => t('例如:010-88888888'),
% c& f+ Z1 H  z( m );: U. X8 e9 d8 J. d1 Z

5 d, p7 S1 W5 r, `9 x5 Z2 f  //表单元素“邮件正文”
/ C; W% t  p! M+ Q $form['contact'] = array(
: L6 {" l8 Y* U' H1 j4 ?  '#title' => t('邮件正文'),( c0 U8 U0 v! ^) P$ {' {* D  O1 [
  //表单元素的类型,这里为textarea' {2 R+ r/ a( @+ f  F3 P& H
  '#type' => 'textarea',
2 E6 z8 O# B* |7 l, a  '#required' => TRUE,
4 m" n( P$ S) y: ]# i+ a" [- r  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",1 N( E- N2 Z; _0 j
);: u  B' t! Q) x% I+ v

, P% z* U& ~: t+ f6 | //访问来源的可选项
5 x# b5 o# }) L. G5 S9 w* z! D $visit_options = array(7 u* q: D2 e4 S3 Y* d
  'baidu' =>t('百度'),
, F7 m3 J% r3 v5 I  e/ D  'google' =>t('谷歌'),
5 q& X. e  s! x' [  'sohu' =>t('搜狐'),  a/ Y( R" Y( W1 Z" p6 a5 f
  'other' =>t('其它'),: D6 h( t9 n1 a
);: j7 L! u! s  Z3 X
//表单元素“访问来源”# C- q; c* C% E7 J; X3 R
$form['visit'] = array(
( N( g0 }& x  H  b; g2 \  '#title' => t('访问来源'),
/ _- q7 u7 t0 T+ i- T4 r: ?: U  //表单元素的类型,这里为radios. e3 g  Y- i$ V+ m- N& R9 x
  '#type' => 'radios',
; c3 Y; C: W3 ^% j  //单选按钮的可选项。
9 G! A3 i$ a0 x. x7 ~  '#options' => $visit_options,
& l. s% C2 R. |% L! G  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
0 s$ L* R. W: X+ p/ Y: }: }  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
$ a3 j  m1 v8 W- B2 a: P2 A9 z  '#prefix' => '<div id="visit-radios">',  Z% n, Z& l6 R
  '#suffix' => '</div>',' D. Y5 s1 _8 \, R5 l
);- a" \# o0 H: f
* Y3 H8 n: {! G" z6 @
//表单元素“其它”,它依赖于表单元素“访问来源”
8 b6 ]: {: j# v, a $form['other'] = array(0 U. o7 l. l2 K# t$ U& v% z4 h  M
  '#title' => t('其它'),; v3 Z: f$ F4 D" h$ o
  '#type' => 'textfield',
# @, B  q& X) j# g5 Q' d  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",, _- A- V( u$ [% A
  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来
1 j0 i: R9 X& S2 _9 v+ E2 k! _% ~   '#states' => array(+ n; D8 ^+ l3 P& A9 {* P
    'visible' => array(
$ P" l  }; o. ]6 Y/ o8 ]6 C, R# M     ':input[name="visit"]' => array('value' => 'other'),! H0 W: \9 x4 |. x
   ),: g7 s/ |. S" A7 q
  ),1 E" m& w$ X' [6 o' q
); : `6 x  {3 s* B$ ?
/*
+ M5 |0 Q* q8 r- G. o //表单元素“确认”提交按钮6 _" {+ X- z* m9 W+ ?. d" T
  $form['submit'] = array(
4 N8 n  b% \3 [- \9 A- X& k2 F    '#type' => 'submit',/ A6 A" o% _& Y9 E+ g. o; Y0 O
    '#value' => t('确认'),; _+ Z3 G7 v. |& e, y1 |
  );% Y+ b& e6 a2 ^$ R- q1 Z
  */
8 ^( R/ W0 R& W2 p+ n+ z ' t& Y! @( ~( u& ?# J' u1 n
  //表单元素“确认”提交按钮,这里采用了图片的形式2 X* f6 t( b! d  Y/ s1 m0 B) h' Y
  $form['image_submit'] = array(
0 S& u- Q, [6 r   //表单元素的类型,这里为image_button( N6 G8 i5 b1 d  o8 i# s
    '#type' => 'image_button',8 Y3 K! g: s9 s) V2 p+ z3 Z8 W8 }
  
* f; W5 k! T0 m% f' q  //图片按钮特有的#src属性,
$ t6 \. a( \  P. Z# z5 f' F    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',( M8 f( c4 a& g. V0 G, ^
    '#value' => 'image_sub',
' E( }& F+ p  ?9 g/ `6 L, P- Z  
( {7 e  G# P, b& L  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果+ t5 X7 f0 s) O" Q$ c/ C
    '#attributes' =>array(: K8 h5 Z( {; G7 @$ {! q( A
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",8 L' Z- e: J! y5 E0 t5 a# x' g) y
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",/ u% J' U8 C* N8 X+ x
    ),1 z- M) A7 u8 \3 z; J9 F. M# U1 w9 O
  4 a- ?7 p8 M% V
  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div! `9 n0 p( I1 w# h0 Q& [; l
    '#prefix' => '<div id="image-submit">',
0 t# I0 T# O; u- N& _0 ]    '#suffix' => '</div>',
) O; R& I, f0 Y: h; i  );  return $form;
/ p) b6 N2 |- M/ ~# I+ e}/**  }( l% O- `. h* V! t4 B) O3 e
* contactus_form表单的验证函数5 v! S! N' l: _& N
*/" n# C4 a! g9 X" b
function contactus_form_validate($form, &$form_state){$ N$ C- ]2 H  m
  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。' t0 a! x4 s& [  p2 n7 L
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){
* O. \, Z$ I% f0 ?$ O3 p  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));# W. L% [1 }+ |/ W" R
}
# U/ m! U6 g: @' s8 \! _$ o  M3 j}/**) M& v1 m& M1 m( w1 [! Z* g* S3 t2 S
* contactus_form表单的提交函数
( H$ L8 l8 G* H# [& t" s */
0 L( q/ o! o' v% Nfunction contactus_form_submit($form, &$form_state){
6 z2 Q  g* H: t# ?  Z  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。
; Y) k; j; e, n# R5 R $_SESSION['contactus_form'] = $form_state['values'];1 A% @% F8 {6 X% o8 q# z
//表单重定向到确认页面
5 z' K3 B& b. K) ?  U" X $form_state['redirect'] = 'contactus/confirm';- N( S4 L( H& @
; g: V9 F7 A; Z, @5 D

: L3 ]0 H( ^6 R- [6 r. j, u' U. \. T8 f8 `5 S
3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
6 S% H" v7 d! [: f# I" T * “确认”页面的回调函数: R% A5 o+ o, d* P1 |: x
*/
. x2 N$ q1 x% ~0 }# O" dfunction contactus_confirm_page(){
5 x7 {4 B  l% R+ l5 f$ `  //我们为这个页面设置标题
+ O+ Y6 n0 A; X0 A drupal_set_title('联系我们');1 u; [; j' ~+ R: [  }* B
4 |+ J, k" F2 G; ?6 q6 q
//这里首先作了判断,如果会话中没有设置contactus_form,返回contactus0 T1 g. d$ U( X# D2 Z
if(empty($_SESSION['contactus_form'])){
3 C8 J) x+ a& l  drupal_goto('contactus');8 ~' z4 }! q5 r/ T
}else{
) Y2 f0 c" h8 p; y3 B } $render_array = array() @# y2 ?& R& ^8 `; H
   '#markup' => '',   @0 s+ F# k! Z7 l2 Z6 c
);/ |; A+ j, v7 [- q. e
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
! q# B( j0 s) }7 V/ L/ N# H $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));& p6 O% G+ `, n* M6 |
//Drupal7的页面回调,返回的应该是一个数组
3 Y; J' ?( Q9 L& r1 S) u return $render_array;
+ t! m) Z0 _4 G+ J, ]}/**" N' f' H* R: M+ L" |( j
* “确认”表单的构建函数% L9 o2 Y" ]4 g: r' }  {/ i( H7 O
*/
! ~1 I6 h; _( y) z) ~- |. Xfunction contactus_confirm_form(){
. l4 J7 m. B' G' f! j: G1 C. c  //添加我们自己的CSS,用来控制表单的样式9 O2 l: ]2 Z  N! {* }4 E' ]; w7 q& `
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
7 `, n0 ^* Y% ]& M$ D. C //drupal_set_message(print_r($_SESSION['contactus_form']));
/ R2 ]4 a" w6 _4 D: j- A+ o" _6 l //表单元素“姓名”% I+ G2 _- N! p) D
$form['name'] = array(2 |3 c' P9 y6 H: A# S; f
  '#title' => t('姓名'),
1 Q& A" c, p* v. F  //表单元素的类型,这里为item
4 y2 ]1 U* H. A) \  '#type' => 'item',7 O8 h; p  X4 @3 p" o) @
  //'#default_value' => $_SESSION['contactus_form']['name'],
$ X' K4 w7 }- ~( {5 c  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,
4 |6 a2 b1 _9 u( C" q- x  //最后改为#markup,才可以了$ F  x: n5 @8 z4 x. `3 C. d
  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",# Q5 V' c+ e) Q
);$ _% b8 E( |% a2 F" X2 V
% B6 g. m0 f8 J) ]. O
  //表单元素“单位名称”4 m9 _; m' ~/ f; b. G8 p% m' f
$form['company_name'] = array(
7 [$ n  }# U  F8 n- {) M) l7 Y  '#title' => t('单位名称'),
' R& ^0 M# t8 g6 ^  '#type' => 'item',. `; A  L, R. I( C7 U7 D1 }
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。" F( X9 f, ?0 Y1 O. b! R$ u# t
  //'#value' => $_SESSION['contactus_form']['company_name'],
6 y/ |& k! I  S8 r8 S5 k5 T" z  //'#value' => '123456',4 u( w  ~% ]" N1 F/ b) z
  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
2 ?/ p7 l: W$ j8 ]- v4 n  //'#description' => '123456',
: u( j0 _- a# d; y" O' `/ T );) x2 G% X/ C& I/ t/ m
9 M$ E7 E& P, L( P$ R* |: j
//表单元素“电子邮件”
: m; d- k$ [, p# i $form['mail'] = array(, J- t' E% m" a
  '#title' => t('电子邮件'),
: x6 a' j$ t. v3 j9 M- b  '#type' => 'item',1 ]/ m& {( s) u1 ^2 i
  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",* `8 Q+ Z2 S" P. Y+ u4 x
);6 N' m# v/ O3 I
) K1 C7 ^4 K" _& ^
//表单元素“电话号码”
+ J: j9 L6 H3 J& l5 v $form['phone'] = array(
* D. R8 L3 @, g3 Q. F; |  '#title' => t('电话号码'),
8 e/ a/ H3 J4 N* A; P  '#type' => 'item',/ l! M. y5 @9 ]4 x) s* e& [- u
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",! ?  |  i5 O8 J# F8 A
);1 V6 R/ A. d) a" W) W6 C4 W

( @5 r* u* Z5 p& ^0 s- j  //表单元素“邮件正文”! O& T  M! i% [4 G+ e
$form['contact'] = array(
4 x; m% ]  w2 R: E9 I  '#title' => t('邮件正文'),
- U" ]  u. g; O+ P! ?: @( ?8 w  '#type' => 'item',1 A( K2 W$ R5 N
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
& y# U2 D( x0 P' c7 B );
1 A' e0 J, F2 m! A4 c+ V ; O$ M5 g4 r6 Q* q2 h
//表单元素“访问来源”
5 o4 A' Y+ R7 B1 V$ K' D2 s$ q) h $form['visit'] = array(% s* m( k( }  x0 N
  '#title' => t('访问来源'),, u2 P' i! A0 H3 |9 L
  '#type' => 'item',
! W, H5 E7 I5 u/ b  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
# M- E8 o) G' U- v );* i6 M! P3 W2 s1 r! l+ Y: K

) m# Z' l' R4 ?* {* y //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。
. `  g  b" x% U+ E1 _) j: k if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
. T# `% ]2 X5 z4 R  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";$ h, p. F5 s1 R
}
7 r9 p, d, Y3 _! o5 K2 v /*# S4 e  h1 D& A+ q9 p2 U
//表单元素“返回”按钮6 W. c* N+ n9 B) P$ w
  $form['back'] = array(9 d  h% \7 O+ S* n
    '#type' => 'submit',! x+ p5 [% X. w  Y3 B6 d
    '#value' => t('返回'),3 q: s8 \: x% `( I- ~) Q" Q
    '#submit' => array('contactus_confirm_form_back'),
9 Q1 t6 ]  B9 a( B  O  );
' e4 F% Q; D0 X8 o* I+ x9 X1 K //表单元素“提交”按钮1 l8 D$ A; [$ a# l5 Q# x: {, J
  $form['submit'] = array(% ]9 u4 |: w' d; u
    '#type' => 'submit',
0 l' z0 e- q* p9 y: F+ C' p* {$ \! r    '#value' => t('提交'),
; Q2 u3 E9 ^. y4 F  );
' U7 s! s- e- U3 b3 y. A  */* t/ i8 i% ]$ R  A' Y5 q7 s
( u' i$ \( e1 `% E) h' m) W2 a! Q
  //表单元素“返回”图片按钮. ~" i; A6 W& K# u; f
  $form['image_back'] = array(' ^( X8 H8 W* G# L. E* n0 N# X6 d; {
    '#type' => 'image_button',' F( Z$ [- V' s5 J/ o
    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',
, h0 |3 V+ {; O8 w  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back
0 v3 Q  S2 N& @! ~& f    '#submit' => array('contactus_confirm_form_back'),; a+ G* F) t4 G
    '#executes_submit_callback' => TRUE,
; |+ ~( M  e# {# I+ K, U1 U/ L  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
1 w( L9 E' o5 E$ ]/ k    '#attributes' =>array(
! k5 v5 T: X" ~. e; r6 v      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",1 }& I" }, R0 Z- D  _; R
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",* I; N" k' Z, b- c% S. |% k7 E
    ),
  k% _; e% R+ b$ G5 q- c4 Q4 h4 S* Y  );
1 S9 g# ~$ _0 Y! B' j, L 4 \0 _6 n! L6 z& g2 M, O
  //表单元素“提交”图片按钮
6 S$ Z" a/ j6 k2 [+ W% H  ~* P  $form['image_submit'] = array(& }! k" h6 R" J/ W2 l! s$ Z. g- l
    '#type' => 'image_button',
9 i% ~* `8 i: n' U9 ]    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',
3 f& {' e' O  Q1 h! L& S. a) d+ r/ Z    '#executes_submit_callback' => TRUE,2 l0 X, O- J1 g: g
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit
$ k- u" V5 M- J( [! O6 r' h    '#submit' => array('contactus_confirm_form_submit'),
+ t$ f/ n* B  S6 _" i: Y6 c    '#attributes' =>array(
& @# Q, M3 z; I6 ]/ r      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",
7 ]7 Y9 `0 ]) o% Y" a" f6 \) O$ ^3 r      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
: \, K* Y$ W0 w' [% E* B2 q    ),
, {/ a( e3 X5 S- d9 q' r  );
7 `2 P% @: ?: p- k  s  
5 H1 D- A& v& [7 X% q  return $form;/ T% y0 _2 L8 ~& {# ]+ t) _
}/**
7 m! L& y7 t$ `8 ]+ ^ * 返回按钮对应的提交函数% l' ^1 }3 L) w" L0 i
*/0 o+ Y2 ?2 ?% [- R) e9 ]" w& p
function contactus_confirm_form_back($form, &$form_state){
8 s& H! e5 R0 f9 ?# C  //简单的重定向到contactus页面& D. c% c5 x0 o- e" u2 p6 ~. s
$form_state['redirect'] = 'contactus';! v! s. l  j- I6 v9 l1 g7 N
}/**
. s2 N0 P/ R9 ]* I( \4 [8 l * 提交按钮对应的提交函数
) y* I6 v4 H, E0 k) x' S */( d3 V0 J3 D+ W/ o( g
function contactus_confirm_form_submit($form, &$form_state){
! L( Z$ K  E- Y: [* D" Q4 [- g, C $values = NULL;
. E) g6 \# h7 V8 U8 g. l6 [4 v# o- } //从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。) j2 Y( N2 F1 J& i
if(empty($_SESSION['contactus_form'])){4 ]+ A( I: |7 R, L: g6 B( _
  drupal_goto('contact');  Z& P% ^  q+ V  Z, i4 N
}else{) d  |7 g& w! i0 |. t8 c% \4 Q
  $values = $_SESSION['contactus_form'];
$ p+ o! G. ~- R* u: E  unset($_SESSION['contactus_form']);
5 x$ R5 ?, F# `8 W% ^ }
- x. N+ D  P8 d/ p" Z  u
+ a7 A. {. i; R //收件人地址,这里为作者的邮箱# x. o  n  G4 ^( K+ y9 |$ K5 Y
$to = 'g089h515r806@gmail.com';& U: P) F; h$ i  G7 w, W  |. r& b6 p9 Q6 c
//用户填写的邮箱地址
0 c- b6 U/ b+ ^; u1 S $from = $values['mail'];
  X0 l0 U# x' p
5 u/ A) |' H& ]8 Y6 u //发送邮件. g) J+ Z) I0 N7 H9 M" H) R
drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);
% x7 h7 Z* R/ o  a) V 1 [' D0 w' J$ ~( p6 v, h
//简单的重定向到致谢页面
3 P  Z6 U- @- p" E: I $form_state['redirect'] = 'contactus/thanks';! e! t5 w/ X8 @) U6 w) Z7 D& G& O6 B8 F
}/**  x: G0 B( k' y: {& }, s/ V
* “致谢”页面的回调函数
$ U# _3 S* R& Y& M; D */
0 {; K! G5 j; r' T- D1 V7 [function contactus_thanks_page(){
1 C2 r' C; ~8 p! {  //我们为这个页面设置标题
: P* @! ~: n2 V! @2 s% I5 L9 } drupal_set_title('联系我们');4 n( Z" V! r) ~$ m
$render_array = array(+ o' L/ {( J! Q. [) d9 A$ G
   '#markup' => '', : ]: ~! @! h; d$ P7 O9 l
);
; L/ k' w+ _: @* j( t7 x$ J  B* s //Drupal7的页面回调,返回的应该是一个数组- E$ e! V0 T" _3 a+ |& V8 d$ L. ]
$render_array['#markup'] .= '<div id="contactus-thanks">';$ Q! _' e& z& I
$render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
! q/ q$ |, G' `( Y" Y# \# H% G $render_array['#markup'] .= '</div>';
1 K$ E" |* f+ q+ C! R
% M1 N: n. }' c: R  N return $render_array;& m% `* H1 D" w5 m  L) X
}
/ q! e; \+ E, b& n
& q# [; M: p6 C5 S9 o3 h! K9 H* F! a: T4 d% a% P$ D- n# o

1 c# b7 p6 w  y' H' B2 j& c& ?6 T
! Z4 A. p$ Y  e/ a4 D
, C! T6 O4 U# q& d$ O: F7 v) Z6 ?; @  o1 _( v' c
5 v( v/ ]- }! a5 y4 B

9 Z& v  L! d8 a  ]& {, e/ ?  N$ T  ]& O$ S; j

0 X3 t# T! L* M
9 k  G2 ?+ F0 r: _# M: p; _" }( V, ^$ }( F9 {

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

GMT+8, 3-20-2025 06:51 , Processed in 0.403010 second(s), 183 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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