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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
. O, N6 G: L# D5 `<?php
2 m$ c3 l7 O# M3 \4 t' |/**; A! S+ p9 B% F" f4 `
* @file
) P, `$ V6 Y2 K! Y" M! S * 方便用户联系我们.: t/ S' q. m8 Q/ \9 _( `& j1 D
*/
5 i9 W5 K2 e( r/**
8 z6 a( V$ i) L' P0 H. X; F3 X * 实现钩子hook_menu().
+ ^9 l* p% N! E1 x( \; A */2 [2 M% U, S. |; g: L
function contactus_menu() {$ X  C) t( \% D
  $items = array();
% V! K; [; A1 ~* [7 D //联系我们菜单项
+ U  P5 {" b+ ^0 N  $items['contactus'] = array(' O2 i$ x2 c1 r" d
    'tilte' => '联系我们',
, H% L; a/ B# ]1 ~6 }" v9 T      'page callback' => 'contactus_page',- `1 x4 m& h2 H( F$ G" \2 h- h
      'type'     => MENU_CALLBACK,
% G! ^; d- J; o      'access callback' =>TRUE,
7 O. J& e* Z7 ?- k0 U0 `   'file' => 'contactus.pages.inc',1 X  h7 D0 ^9 t1 y' B
  );
/ N% i) S- z" X) } //确认页面菜单项* ^+ D/ b4 X3 M. D+ Q6 L! q$ y
  $items['contactus/confirm'] = array(
( i$ E6 d1 Y# C. B# h: u9 S) o      'page callback' => 'contactus_confirm_page',
$ N/ X. Z' A$ o; ^* [0 V      'type'     => MENU_CALLBACK,
& `& L/ k5 y7 v2 n1 R      'access callback' =>TRUE,
  J$ s1 E; H) ^5 J! R$ r* n2 s   'file' => 'contactus.pages.inc',
2 I( |' Z" c8 S" U4 H  n  );# M, O$ `: R; h) r
//致谢页面菜单项
+ b0 {: |. ]6 z7 o; b  $items['contactus/thanks'] = array(
& H( p: s/ Q$ P- \5 \      'page callback' => 'contactus_thanks_page',6 ~6 N; U4 ?" R* h. T* p) n
      'type'     => MENU_CALLBACK,
2 z$ b5 s- ~; g      'access callback' =>TRUE,
' e9 Q2 w/ d& V" S   'file' => 'contactus.pages.inc',
' T7 {: Q0 s7 Z; f% D. h3 l' t  );8 I6 L' T( n* N
  return $items;
# j1 |) s' I) a" b& M}5 D8 H+ z! ]8 B- S) f# u
/**: F7 d" {* p; I' a  E4 ^* b
* 实现钩子hook_mail().
/ V& k/ U/ w" ?3 L' v7 e) r& O& h& e */
& s$ k  S# }/ J6 z* W( ]function contactus_mail($key, &$message, $params){
. ~: }: p4 l4 ^0 d& E $language = $message['language'];
* j7 z" [$ G) }3 Y- W* Q  switch ($key) {2 a9 p5 O( K7 |+ E' Z
   case 'contact':
# H' U0 D: x$ e5 i! i  5 h  \$ n" A, r: C& H( E  ~
    //邮件的标题8 d; B+ m* k9 g/ t/ x' q* g( @
    $message['subject'] = '联系我们';) j0 \: p/ P+ n  ~: `" H& T! O5 G# h
Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
- R$ k$ R# @7 f' ?2 ?  ' ~' x/ [8 B. Q
   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源: L$ S' |9 t+ D9 @
      $message['body'][] = '姓名:'.$params['name'];, \' c, v8 k9 [+ }1 O: U! u* G
      $message['body'][] = '单位名称:'.$params['company_name'];
) {) t3 F& L& s# f' ?      $message['body'][] = '电子邮件:'.$params['mail'];4 d8 Y( a8 u! A. @) B/ R
      $message['body'][] = '电话号码:'.$params['phone'];
( B& n! }, k# `      $message['body'][] = '邮件正文:'.$params['contact'];$ b) g6 k- q# u6 ~) j- U. ~
   . ]3 p0 F* v. ?4 Q3 Q! }
      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']* }1 k. V. }" s4 O7 X
      $visit = "";5 T- d5 E5 }) ]4 n+ }
      if($params['visit'] == 'other'){3 d: _3 Z0 R6 ^, c4 B) t& D
        $visit = $params['other'];
$ T2 \- [6 `: z      }else{
! v$ X0 d# P; O. S$ A4 J- u3 `0 A        $visit = $params['visit'];
& A0 i4 Z3 s7 V4 Y6 b( H      }8 a1 f4 w0 B& K
      $message['body'][] = '访问来源:'. $visit;* x! I/ Z; e& t( F) o
  }; J2 I/ D/ ^: R# m; }6 [
}0 _0 g% G" z. s& @! Y8 z9 S/ j6 `
0 D- D! q& L6 d9 [. b) z% c! @' n, _/ i

* q1 p3 Z: }' j) F  w
* M2 H$ R% P8 w2 S- ]" k: v! z" x2 p4 _6 l6 l8 ]' ]) N
2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调
/ E0 ~$ ]- N+ K- C0 V2 z2 b<?php/**
+ I! o5 D! p( z  Q: e- W4 r# B * @file/ ?8 K1 ?! X9 m, m4 U' m. P, B3 Q
* 各种页面的回调函数.' b4 p% j" h1 [; j! X# `
*/
. V0 Q8 P( A. @$ p& @! {
  {7 X8 A; c/ R) g4 _/**
9 ~8 o: v" c: w- ~+ K3 m2 L; Z * “联系我们”页面的回调函数
% E/ q0 m# w+ B1 a. v */* I1 B1 o1 C% w
function contactus_page(){* L& P, W  |2 i: o) O: U& C
  //我们为这个页面设置标题# V  ~4 ]# \! S; Z) D% E
drupal_set_title('联系我们');( i7 N* ~3 _/ n8 L
. P* k/ f( a! Y! q
$render_array = array(
- W6 w* g3 P' Y! |/ \   '#markup' => '',
: u$ Q* E- ^  G6 X$ o4 Q* {1 A6 y );
' e4 U7 l" d, n7 D$ `  ~  x
  L3 s1 P( Q$ ?( {" w, h //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。( J$ W( Y  R, Y$ {
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));
% [' _1 C0 T; p / X) W8 D& W% @+ Z+ d
//Drupal7的页面回调,返回的应该是一个数组$ m3 Q% P$ V8 ^" L5 A
return $render_array;* j( x2 `+ ?/ m' j. s) g7 }
}/**# |- w) t5 p8 ]% |+ ^3 U' Y5 y
* “联系我们”表单的构建函数3 c- j& y: [0 N( l+ F
*// ^5 s# e+ o0 P; k
function contactus_form(){0 p' C3 l  f: K/ T
  //添加我们自己的CSS,用来控制表单的样式3 S) C$ u8 p9 J+ s. v3 x
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
  R  c0 `% h( s2 v 9 V3 @# \  A  q8 u
  //提示信息,默认为markup类型。
6 c! @$ d: u" z$ U, E* s/ [ $form['tips'] = array(
: q/ c- f; S6 S! C7 G) E  '#prefix' =>'<div id="tips">',
" j+ l/ R' [5 Q4 v% `4 B: ^+ i+ b3 y8 a  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),
% I' O# B! H! E+ r( s7 ?  '#suffix' =>'</div>',
& L4 `: x5 ]$ P0 L+ s3 e2 A3 X );
- A/ r, m' E3 x5 T9 I ; y- w4 p) J' R; j2 B
//表单元素“姓名”) `; j. T2 O2 h: N; M" o/ L& U
$form['name'] = array(' f% B8 @3 ~# e9 d+ m" P+ l' o, o
   //表单元素的#title属性,对应于实际输出中的label3 M4 n; W7 m( O, E9 i* c
  '#title' => t('姓名'),
- l' B9 X) J3 c! O- a  //表单元素的类型,这里为textfield
- O& Z0 ?4 A1 |  '#type' => 'textfield',! f" }7 {% z- z  y. L# ^5 X) K
  //这个表单元素是必填的. F: o, C& ]6 z' p, @* Z% W% a1 R
  '#required' => TRUE,$ C( U$ E$ C. ~# t
  //表单元素的默认值,这里使用了三位运算符和isset进行判定
: Y7 z6 g/ X- o$ @( u3 h  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",/ p( G* x, h% c  Z: }* {/ a( H7 z
  //表单元素的描述,6 ]# I; M+ h" V  P
  '#description' => t('例如:周星驰'),
$ C  S! k) M) \! h );* \) X% e. H& w# e! q

: O$ D7 `* H- [; o+ E  //表单元素“单位名称”
$ G( K8 [0 {1 ?: e6 s* u) O' x $form['company_name'] = array(7 C- D2 w7 L5 j; u. Q
  '#title' => t('单位名称'),
& b" }4 Y. k. ]# u8 l- h  '#type' => 'textfield'," c) u( d. u9 m  g5 E0 C1 e, n
  '#required' => TRUE,
) l" ?/ L0 \9 ?  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",0 c: z- M! i* S; r  z% @; D* j+ }
  '#description' => t('例如:北京无名信息技术公司'),& m0 z( V7 h0 t, O: O7 `
);5 c0 L- G1 k% e+ {/ B% m- h. Q

2 x0 @! e+ o2 x  //表单元素“电子邮件”& d, W2 ^% q# ?* h+ r
$form['mail'] = array(
. |9 f4 Q/ i5 U* Y+ a1 S5 J  '#title' => t('电子邮件'),) W8 Q7 r9 J  s9 S% W6 }( N
  '#type' => 'textfield',, X. d8 T$ E" |% B5 V- j
  '#required' => TRUE,) j  V- c$ x0 g2 z6 L. _
  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
1 x! e: H$ A# A  '#description' => t('例如:info@example.com'),: A# w8 X6 `/ J% V4 I+ e
);% O7 J3 ^4 ~6 v. |! f3 O3 R5 H0 P

: G, D! Q. z3 x) p' r" G //表单元素“电话号码”
& M  r& q' `0 q $form['phone'] = array(' M9 j% p. q% N+ ]7 Z
  '#title' => t('电话号码'),
# H% n  e2 H( g$ F! `  '#type' => 'textfield',
2 G- W2 h, D0 P  '#required' => TRUE,
0 s  w; k1 j) D4 A3 n7 `% I  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",( D# M2 v' Z+ g0 Z3 q4 O+ l# E4 W. C
  '#description' => t('例如:010-88888888'),' C3 U3 H' W% T2 A
);0 ^! z! r/ j9 o" N) t0 ?
$ Y9 o  e) _6 k8 T1 X, p/ U
  //表单元素“邮件正文”
8 T4 E. G& r4 [) C# o $form['contact'] = array(
# ^4 M$ Y7 k, U7 q" N  '#title' => t('邮件正文'),
/ o& A( P' P( W: Y  R' u  //表单元素的类型,这里为textarea
- b7 R) c( N3 j: X' T2 N2 s* f  '#type' => 'textarea',
- A  {# e7 Q7 h' `1 B: f  '#required' => TRUE,
/ X5 Q' u) r+ e+ T# `% B4 r" x: D  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
! B5 W' L% a1 u );  g/ o3 X2 F: c7 |! @( O' C/ r0 S

! |& b5 X' _# t9 }3 V! G8 M6 X //访问来源的可选项
% z- n6 E3 k( d3 A $visit_options = array(6 r4 i3 `$ f- u0 H3 A
  'baidu' =>t('百度'),) z& R+ J% e/ w
  'google' =>t('谷歌'),9 J& @: c1 F3 M7 S! b3 H
  'sohu' =>t('搜狐'),' Q% S: \; `- i
  'other' =>t('其它'),
$ [) b# W7 M/ \ );- V. F. ]% R2 J5 o, C2 _
//表单元素“访问来源”
. M$ `0 H- p$ |% `: r7 A/ l; [1 ]! ^ $form['visit'] = array(# E2 _: E- ~7 ?+ ]! E4 ]6 \
  '#title' => t('访问来源'),
! H3 f' P' m- [; x# ]  //表单元素的类型,这里为radios
4 m. H* s, E. p" E% z+ f1 t  '#type' => 'radios',% C6 U# T% i. Y: u. `) F
  //单选按钮的可选项。
- ^8 n' j& X, M, U5 A$ \$ r5 |1 O3 J; F  '#options' => $visit_options,6 y6 R1 o2 `( _: k& B
  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
8 E+ i( y; D1 L* [% g4 c  e2 _  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
9 O" z. B# Y  O5 W  '#prefix' => '<div id="visit-radios">',
5 W2 G1 \0 m, T3 Z0 I  '#suffix' => '</div>',
$ Z% j" w6 y" Z2 M7 c" i5 B" |4 b );
8 |& c% A  `( B8 V# e- q. w
0 w+ [9 B- L1 w' Y  V2 C$ L8 ~ //表单元素“其它”,它依赖于表单元素“访问来源”
/ Z9 }. u) i) |$ u; t% f $form['other'] = array(  q+ X4 N" ]9 g7 _/ M/ z
  '#title' => t('其它'),9 Q, Y* T" t9 d  Y
  '#type' => 'textfield',
; [2 M: M9 V9 D2 E  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",9 F' U8 `7 f# {. X* r/ L  K
  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来6 |8 B9 F  A8 s1 A" @3 M% C& `9 p6 T
   '#states' => array(
3 |# e1 v$ W6 S+ [1 C6 j9 @    'visible' => array(8 G8 s& f4 t% r
     ':input[name="visit"]' => array('value' => 'other'),
6 |3 e5 h' C! b/ p" Z" \   ),% @% |, r- ]0 E
  ),
( j% x6 ?, `" ]# f; E. u) {* Y );
7 l- k  h5 C2 d4 T2 C /*3 x) V9 v8 i* j" d
//表单元素“确认”提交按钮( a/ `0 b' g5 w+ n3 V
  $form['submit'] = array(
0 `( v8 ]% u$ a# F7 j    '#type' => 'submit',$ [1 M6 t" M6 Z4 t
    '#value' => t('确认'),
( }* m* B0 g5 D; [8 G( i/ n/ H, K  );
& ]7 u! Z" ?. Q3 H9 B  */' v4 i5 p* ~* @3 l$ t+ i8 @; H
8 R/ x+ g" }* w+ r# }* H1 l/ c; Y/ L
  //表单元素“确认”提交按钮,这里采用了图片的形式
/ l! M6 k- |& l6 q# v/ z, J; x+ M1 a  $form['image_submit'] = array(
4 X; {$ V' b3 z1 J- _   //表单元素的类型,这里为image_button
: @6 J2 @, y4 n$ S( k/ C; E    '#type' => 'image_button',, I3 \) ^5 P' |' F) B& |. |3 i# S
  
$ R# |) F  w) X( z9 u  //图片按钮特有的#src属性,4 o6 W$ r% [) v# O& U/ b
    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',
8 f% P# |5 f% w2 _, }    '#value' => 'image_sub',6 z9 X0 V( p# ?( F
  3 m; O$ Z7 {. \( O) n4 R$ Z
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果1 Z3 j  u- @- N1 t
    '#attributes' =>array(
+ ]3 b; l, {& \# t, B  Q$ Q      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",
- W( w* d& q! `7 N: B      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",
0 }- L- X5 t, F; L6 n    ),' ~' x# x+ r) X2 Y
  " x( ]8 S1 Q& z" C+ P: P8 P
  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
0 q" ~3 R, Y9 t+ s    '#prefix' => '<div id="image-submit">',
6 M9 \5 l6 b" F3 N    '#suffix' => '</div>',$ ~" o' I) \1 e/ m" A& p- N
  );  return $form;
" w2 h$ _! [9 t) b* b+ z1 x, _}/**
) m& F5 p# B1 K" u * contactus_form表单的验证函数
/ m; R& l* D' [# o */
: e, ~5 q' [7 |  X# b: u( _function contactus_form_validate($form, &$form_state){
! J0 f1 [; {8 `4 g5 d8 }7 \  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。0 R0 _; C& W5 d
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){
; C  f3 g: y: `4 f  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));: F  p5 i$ y) q* |: r/ c: n
}" X; ^  |$ Y2 A. _
}/**
: B- j$ K5 l' `9 p# ~2 g! k2 r& z * contactus_form表单的提交函数
4 Z6 F; F# g8 `* D& I$ C$ K2 Z# ` */1 [' v" |$ H* I, j" F% T
function contactus_form_submit($form, &$form_state){, N2 k2 Q! G+ b  m* D; q* ]
  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。& w6 i1 U, D2 m3 [: ]' V  M6 s
$_SESSION['contactus_form'] = $form_state['values'];  Z0 q/ c9 Q9 F+ b7 V
//表单重定向到确认页面
9 c# Q) O; _/ N$ u  a5 c# p $form_state['redirect'] = 'contactus/confirm';- O- l9 n9 y( ~: `

' D% Z) [) \- b; t2 v; y* K. n2 k3 D+ s9 x5 R; b& T
5 F# F1 K3 v( e# c) _; h0 W
3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
6 q4 m  D# x  |/ q& q * “确认”页面的回调函数) ?. |- f6 r( L3 T4 A- M
*/
. L! Y+ J: \( C# D( }function contactus_confirm_page(){/ P4 H6 U$ m9 O
  //我们为这个页面设置标题
( V7 ^0 T  W' O# l- r6 A, v drupal_set_title('联系我们');! m7 n' x- O) z6 N% ]* \4 r

" I+ l, h2 R! j* G" \ //这里首先作了判断,如果会话中没有设置contactus_form,返回contactus
7 S# q& v1 R; f* ?' L2 u if(empty($_SESSION['contactus_form'])){
2 T/ B9 c9 I# y6 r  drupal_goto('contactus');
3 B- v. O6 q4 N }else{
2 {! G- p' U" n, ] } $render_array = array(
& E5 b5 h$ V! j   '#markup' => '',
! a) l# c6 `+ P );
) ]* P* X9 O( D+ t& d; G //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
+ a# R, g5 c- Q/ {2 E8 ^ $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));
# f, }$ v9 S0 a' g* \ //Drupal7的页面回调,返回的应该是一个数组9 ~7 |& z4 V6 p4 Z1 f
return $render_array;
; x  F9 I% D8 v! o/ {}/**. T# `# S1 m5 v
* “确认”表单的构建函数: h& v' j$ n. u1 P
*/
/ b8 |1 j8 j# I( p6 U* Q- y( }7 t$ Sfunction contactus_confirm_form(){- S2 b9 @+ v1 b$ v3 D& [" ~
  //添加我们自己的CSS,用来控制表单的样式
5 R1 q; s0 k  ]- e drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');, Q' |0 j0 X8 U0 N3 c/ s/ v
//drupal_set_message(print_r($_SESSION['contactus_form']));6 r" [3 ^/ j# |! c4 u
//表单元素“姓名”
  l7 j% h: W- ?8 e. F' D $form['name'] = array(
4 [8 Q" T5 v  X" Z' H  '#title' => t('姓名'),
0 w4 v* X; p% Z! r& [  //表单元素的类型,这里为item
, E. M, c5 }, ?- U+ f8 n  F  '#type' => 'item',
5 @5 P$ q0 e. K" J4 ~  //'#default_value' => $_SESSION['contactus_form']['name'],9 a. {+ g) W1 y  A) ]6 Z; Y
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,
$ L$ @/ X7 ]4 Q: r  //最后改为#markup,才可以了) P, ]% H3 n' r; g. S! k% w
  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",. O& I4 I& W! R+ e0 M
);
! a$ W# Y/ m/ r- ]+ w/ |
, g3 [: Y- k% i; y  _  //表单元素“单位名称”
$ f2 }0 ~7 R% J+ f& p' d $form['company_name'] = array(' N; }4 u) a2 V
  '#title' => t('单位名称'),
/ a3 P. v/ J+ U8 ?$ b  '#type' => 'item',
1 U3 A  D; {/ w; h! {# W( b  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。
1 p* i' G9 S% X# r( G* `/ @  //'#value' => $_SESSION['contactus_form']['company_name'],. x( d, p6 j5 Z6 ?2 W4 u
  //'#value' => '123456',! t; ]" Q: D; f" _, H% u) o% q
  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
0 `% U* e  m  _8 b  //'#description' => '123456',
. q' @2 a5 z3 F" D5 s6 e: B );
  H6 N; w3 X8 E- I  v. r2 F+ u 2 Q7 l/ m5 i/ @
//表单元素“电子邮件”
4 d/ M( m2 M9 j1 A2 ] $form['mail'] = array(
" n& P4 Z  h  _  '#title' => t('电子邮件'),
# x( `- |: i+ U, j3 q$ e% z0 S  '#type' => 'item',0 {' J4 D5 F" w
  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",6 |" [, l, m8 B& Y4 H8 d! J
);
9 S/ d9 |: {& v. S+ ]
; f" Y2 C5 V% K //表单元素“电话号码”
# C  v4 T& c7 k& V5 a8 l+ s $form['phone'] = array(# x" u, N7 B0 m( h% F
  '#title' => t('电话号码'),  x1 ?' @; B9 h( h! f8 }5 q' M- y! E
  '#type' => 'item',9 d3 i8 N& r3 n3 a& ?7 |0 b
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
2 d* o( x4 j3 ]7 ?: d! y );
. q( h0 A& y* Z7 j) K 1 `. e" E2 m2 k. ^. r& {/ h9 \2 C
  //表单元素“邮件正文”
2 J. p1 u$ {- }$ P $form['contact'] = array(
+ p$ h5 ?* q: n  '#title' => t('邮件正文'),
$ v. B8 r, j" V( K0 j* D  '#type' => 'item',
# ]3 {  v" B- H' }5 [  l  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
* u$ Z) l- H/ w1 C0 Z8 M+ |" t, E: } );& _6 j4 w9 u" J4 R: B, ?
. [* Y5 k9 {$ ~- P
//表单元素“访问来源”) m" M& v, ]; ?' e' c
$form['visit'] = array(
# t! k/ D$ o' o' ?7 ~0 p) g  '#title' => t('访问来源'),
- T8 ?- [1 R$ c7 A6 u" v, K$ R, E9 i  '#type' => 'item',0 f$ @7 k0 [5 V' F# {& M& b
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",3 G9 h2 m1 W: [5 _- _6 u0 g" J
);
; M$ n- P6 a6 Y/ J/ N2 v
8 k: g5 R1 i, Y  X //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。
0 i4 r* O4 C) } if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
7 Q  E) m7 p+ b+ f: S$ H2 i  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";3 n4 o2 _2 Z1 z0 H: i# \9 V7 U
}
2 S& k/ v, D' s$ }$ m7 x3 Y6 ]* B /*
- Y  L2 G9 {' f //表单元素“返回”按钮: G/ v" `* ?0 U' D( D$ H
  $form['back'] = array(: ?" k( s0 c. N' m* o! `# I
    '#type' => 'submit',* R& V8 X4 v  H( t: ~  \
    '#value' => t('返回'),0 I8 E7 L5 E* U0 [
    '#submit' => array('contactus_confirm_form_back'),1 s# ]: n5 Y" o+ T; Z+ f, J3 i
  );
8 |! H3 d  I$ A  a- i //表单元素“提交”按钮
, b8 l' \& |; A+ ?( t8 D, ?. ~* w  $form['submit'] = array(  O/ l5 m& Q; o9 m/ V
    '#type' => 'submit',* }) o, x$ \( {# [
    '#value' => t('提交'),
" ]& M2 V8 N8 l( {" N  );
3 ]% J/ F) u1 T  */# M7 V. D! A! g. H5 G% Z& V0 O. x1 ~
' L) O8 x5 P$ t( F
  //表单元素“返回”图片按钮
9 C7 z! t4 z+ I) t5 E6 C# b  $form['image_back'] = array(
/ x$ M! G$ S2 f- y    '#type' => 'image_button',
0 p1 R# t0 ~6 l: R2 [    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',/ o$ U# z; U, N! f9 F7 O
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back
# E# U  C! o" G8 Z0 U8 Q    '#submit' => array('contactus_confirm_form_back'),
  T$ c0 P4 B7 Q8 Z! l4 f    '#executes_submit_callback' => TRUE,/ @3 ]0 r9 N  {5 l
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
* f1 Y+ `; h. h; t    '#attributes' =>array(3 w+ i' |9 b9 Z% a: z$ O# Y5 N) K1 Y
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",
$ C7 k! c9 I6 ^! T9 I4 n      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",
/ `, |1 B8 K* U+ z    ),6 _: q0 W- o) J3 {
  );
# k. q5 r6 q/ ?- r+ x# \3 N( P / v2 R' R2 H, ?$ A+ Y5 b) h6 x" x
  //表单元素“提交”图片按钮
7 U4 E. z5 F; {4 P0 p, V6 V' g  $form['image_submit'] = array(7 R' D8 d+ o& f, b& k
    '#type' => 'image_button',& V; r, v- f% u) N
    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',3 t& n& N, a5 f+ r" V& W
    '#executes_submit_callback' => TRUE,' I% ?  I& }! f3 C) R; A
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit( m* n: s$ O7 q6 ]* q" O. G) b
    '#submit' => array('contactus_confirm_form_submit'),; W: }! j, e) m6 A2 j( U
    '#attributes' =>array(
" d+ H; v" M, ?/ x, }* a      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",
" @  t! X6 b& P1 l8 E) f" T      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
8 e3 P  r9 Z& h' u1 r% p, v9 p    ),2 b6 `3 a/ V$ {  n
  );; \) n. V" W) D0 ^5 R  k
  7 H0 x7 _% |6 R
  return $form;2 n" v3 t# p& u' Z! c3 @3 g
}/**3 o. i5 R3 X" H2 O/ ?4 Q& ]! n3 q
* 返回按钮对应的提交函数" c: _4 p3 M" c% P! @
*/
- N: ~  i6 L! y" z( i! W! wfunction contactus_confirm_form_back($form, &$form_state){
/ Z1 h, Z3 k8 W6 m& R7 F. a! k  //简单的重定向到contactus页面, D  R2 b' L. x0 M$ P$ a
$form_state['redirect'] = 'contactus';  x* r' w: }/ a1 O# N
}/**
( [8 r$ u, x+ I! T5 Z * 提交按钮对应的提交函数" F0 A; i+ x6 M, o/ j! f3 N* M
*/8 m# p) e4 P2 t  q% n. x
function contactus_confirm_form_submit($form, &$form_state){
3 s) m' ^. }; t6 E/ d" e( J $values = NULL;& g, j6 l+ r% F* d
//从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。
" P0 H, \, u, U if(empty($_SESSION['contactus_form'])){
& Z0 r8 O& o. I/ S- S8 a  drupal_goto('contact');
8 R# w+ E- Q4 B( G0 V% }% _, g }else{
; G" Q+ Z, w$ v0 I- _  $values = $_SESSION['contactus_form'];' v& I% t& _7 j+ j7 p' `. o' I( Y
  unset($_SESSION['contactus_form']);. p* {4 ]' T& \9 f6 Q
}
0 B0 y( c) R2 N1 W' D0 w& b" s% ]
* @* b8 Y& @+ ^; N$ U3 P  V! ] //收件人地址,这里为作者的邮箱& H! D  M$ z4 A" n
$to = 'g089h515r806@gmail.com';
* }( t4 W7 _; \/ M# ~% z //用户填写的邮箱地址
0 m  t; |- V* d  n $from = $values['mail'];# Q/ C/ E. r, n2 h

) R, h0 r1 J( R' B //发送邮件2 Z6 l! ]5 a2 l# g! A' W: s8 z
drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);- [8 f9 Y, ^3 C: y8 u
5 n* ]" b1 u, f' j( M' a
//简单的重定向到致谢页面0 k: E: g0 w9 A
$form_state['redirect'] = 'contactus/thanks';
4 S: i4 R5 M/ u* J5 X) V}/**) ]3 k4 J' _2 z# T- \( u3 C
* “致谢”页面的回调函数
! h% i$ B6 r% D */
/ X7 |: t& m, G) K. Zfunction contactus_thanks_page(){8 w1 ^+ B6 e+ G9 d8 e. u. e  f
  //我们为这个页面设置标题$ s7 R6 t; ?7 T, |
drupal_set_title('联系我们');6 L6 T9 |; @9 X) j
$render_array = array(9 b) Y! e4 E# g& Q* v
   '#markup' => '',
0 f. F6 ^4 y0 p. ^7 B) R! W& X7 }$ B );
& m2 b! S& k+ M& {4 f, | //Drupal7的页面回调,返回的应该是一个数组! D; g! m- O) V
$render_array['#markup'] .= '<div id="contactus-thanks">';! h' v5 Z3 u; y
$render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
  Q* E$ x* B( _3 Y $render_array['#markup'] .= '</div>';4 ]$ A# F( u3 `6 V1 z1 t

+ G! {  N  g+ e/ ~ return $render_array;
5 ?- Z8 F4 }! b  ~' C}1 q2 s. u4 ?, J9 I

$ S( i2 S  X/ j' f8 f
# Q+ z5 ]  d- G; c+ b/ f) {3 b
& e% M9 g- b; u/ {+ i% m. b; T. x6 i- v/ ]

. I6 v* K+ f  ^9 m0 U1 ^$ E6 b" R' Z$ K0 e! x3 \

# h9 n& t0 w. t& r( e
6 H. q& P- J& D# i3 e9 a9 z# @2 a4 Z/ m( d5 y' X" Y
- Z# Z# m% k3 c# P! b$ u1 F$ z5 p
3 K% X6 f/ ]2 R1 V9 f3 O

& c; a! T( `7 K. z& f1 U

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

GMT+8, 4-16-2025 21:03 , Processed in 0.566220 second(s), 183 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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