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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
8 j8 L# S# a6 O" ^: g<?php% Q$ ^9 s# t+ ~, N
/**
/ ]7 K" Z( x2 R# | * @file
' @4 F  m9 z' K6 y8 Z * 方便用户联系我们.
7 e$ D" {4 n+ A3 ]/ I' P+ J( }$ v */
! ?! d* S  c: d4 h% G/**
( `% x- f3 X) x * 实现钩子hook_menu().
4 S3 O- @5 Y$ f4 l: c6 E */
& s( m  t" C3 Hfunction contactus_menu() {
! [; i! y  _/ d4 b  $items = array();, @/ k8 e7 u, E
//联系我们菜单项
- w* J- }  e% |/ Q# p( V. o% O) o" Z  $items['contactus'] = array(7 @0 M; e/ }* t% |9 v
    'tilte' => '联系我们',
7 p4 v9 [, E; h8 D/ O8 n      'page callback' => 'contactus_page',
# e( e. [, }; T  g: n7 h      'type'     => MENU_CALLBACK,
/ J2 e; W6 A$ W1 j! {      'access callback' =>TRUE,* m$ ?: M. s$ G. R4 ?. [2 E
   'file' => 'contactus.pages.inc',
) `1 E& Y' a" i5 h5 d% D/ G  );
3 [3 O# b. ^: @, G- Y //确认页面菜单项
0 [  M  W1 {3 Z* H  $items['contactus/confirm'] = array(
0 _7 B2 }' Y+ V' f$ g      'page callback' => 'contactus_confirm_page',! i  ]( Z& V  p0 P6 i
      'type'     => MENU_CALLBACK,
8 ?/ q( `! _3 V      'access callback' =>TRUE,5 ]1 A( r  {0 c4 ^  |
   'file' => 'contactus.pages.inc',$ D6 V5 _5 h! @+ e8 H) L& v: N9 K
  );' \1 m  C2 P7 ~2 I/ z. M
//致谢页面菜单项1 ~; f/ o1 Z; e! v
  $items['contactus/thanks'] = array(. s- _, ?% b) L, Y, x
      'page callback' => 'contactus_thanks_page',4 @/ ?& o/ G; t, C
      'type'     => MENU_CALLBACK,
! N8 L3 q" g0 N8 ]) k      'access callback' =>TRUE,1 G) }2 E/ b& Q5 K4 N
   'file' => 'contactus.pages.inc',
4 p( t; \; B$ t6 L4 u5 R2 V: {, ^  );: u) o( z' j% R( u' _
  return $items;' V7 b1 M) [0 x
}
$ n% m& t2 {% W+ p' b/**
  m+ z0 ^; v1 E( ` * 实现钩子hook_mail().8 w' S6 V$ _5 w: M
*/7 Y/ E, D% i- G. o
function contactus_mail($key, &$message, $params){8 K% V6 i; g* j9 h/ f
$language = $message['language'];
- B+ g4 o" v" W; m  switch ($key) {! y( t7 W  T. h5 r3 C$ D2 h
   case 'contact':
2 b! L* a( K) {9 R, |' d  - i3 \6 B+ z% e2 j7 [. m  i/ ]  G- M
    //邮件的标题
6 }# G5 z' J2 @2 J/ c    $message['subject'] = '联系我们';
* Z6 t% ^- n( j Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
. J3 _' }* E& i  
5 b, T- }8 E4 j7 l: j/ L0 m  m   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源
* U; E/ }  e- o/ Q' L% ?! ]8 v      $message['body'][] = '姓名:'.$params['name'];
$ a5 B% ^  W7 G5 {0 ~3 t" Z      $message['body'][] = '单位名称:'.$params['company_name'];, [( G+ |% f2 g* G/ E
      $message['body'][] = '电子邮件:'.$params['mail'];
% o& O6 Q( l1 H      $message['body'][] = '电话号码:'.$params['phone'];
$ U4 E9 G2 M9 x9 \      $message['body'][] = '邮件正文:'.$params['contact'];, @: X# M* u8 f- e2 s' e
   
- X, a# l" A( {      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']
1 |  S& J! e" m5 z      $visit = "";
0 D2 E& ]" y8 [' f& V      if($params['visit'] == 'other'){$ b+ w' @4 @1 S8 n( O
        $visit = $params['other'];# D$ l/ E+ A1 Z. r# f% }
      }else{
; |. [: @* H9 z/ u8 \) }4 P( r: X        $visit = $params['visit'];9 q& ?# J; u! y0 {1 }. K
      }
5 ]! u3 O+ m- p      $message['body'][] = '访问来源:'. $visit;
. F) S& f1 b8 H% r! S% q7 F% k5 E  }- ^2 e% g/ \4 O4 R0 b6 d& X1 s! I9 ~
}
' l: w) k9 G0 _. Y  Q* Y- |6 H
7 Q% m, Q( V. v$ i/ g$ I2 p
- \9 j( F( u7 Z, e4 e1 Y, Q2 N+ C+ }5 R& a: d

( c6 X) v9 p9 |/ n. k2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调3 A% X( j, H) S; \! G
<?php/**5 L( [) f/ R/ g$ D+ t+ }3 q' |8 a
* @file5 k3 R2 I2 F' ^! z& a" ~2 k
* 各种页面的回调函数.' q& A+ s. P+ s7 y/ O$ l
*/
( {. G7 C9 D: p3 }4 b$ E' w * A; C# M* A& U3 a
/**
, L- B2 q# ?/ [. @ * “联系我们”页面的回调函数
/ A* Q, H. [/ [- I */" I5 |+ {& w! E4 m+ u
function contactus_page(){7 P( S6 K( Y4 z" L" y) p: s' [: v
  //我们为这个页面设置标题0 g- ]. K1 j7 u* u+ a' @2 |
drupal_set_title('联系我们');; J5 T" T. W+ ?2 E% k& s
' y1 _/ Q- E( {* I
$render_array = array(
4 O( z, G( A) o, I  f8 a6 h# B   '#markup' => '',
% J0 n3 j) Z$ c5 O. i( Q  K- @ );' t) D. W5 x0 k4 n: I  H# \" m( V6 V
; x( U1 o4 T' H0 P/ b2 ]' F& s
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。" G9 w; x3 X. N& s' ?# n1 {4 O
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));
$ {( u7 j5 g1 V# t+ S6 v0 [ 0 d. Q/ O* f3 X# s
//Drupal7的页面回调,返回的应该是一个数组: k- V5 g% i( i) l0 o: [5 E
return $render_array;
0 W+ O9 @/ b* @; i: ?+ S. e! b  l! L}/**$ @" F7 K% g) X8 c/ l$ b
* “联系我们”表单的构建函数# d2 K( Y+ k1 j4 a0 k
*/+ v# h; Y$ Y8 R. U- t0 P9 j
function contactus_form(){
0 d; n, l+ S3 k+ T' ^  //添加我们自己的CSS,用来控制表单的样式
! E7 z( k9 \' t: [ drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
1 Q* T. W& \8 G4 P& }* t
0 k5 z% B0 Y4 o% C: j* z/ G  //提示信息,默认为markup类型。
* @( B1 S4 C7 z# O% ^, W3 ~' \ $form['tips'] = array(
* F) {+ y* o0 s4 a. h( d% g# y  '#prefix' =>'<div id="tips">',
" K; M% p5 k- m9 L0 j; M  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),
% j; D) H: p* _3 x4 P! F7 G, Q  '#suffix' =>'</div>',
% }7 }/ E8 s: G7 G9 F) [" {$ C );% p( u; P, p4 W4 x5 B2 u

6 E' ?- |4 }3 a3 [7 J) O, ]/ k, H //表单元素“姓名”
2 c2 B; f4 T5 G. c: E, L. e7 I% ? $form['name'] = array() v7 j: j- @7 _% ?, [: z7 Q# w1 V8 |! \
   //表单元素的#title属性,对应于实际输出中的label; ^- ~' F0 a3 n! M, d' w$ z
  '#title' => t('姓名'),) j8 a, G. ~6 p9 V' V/ Q$ p$ N5 t
  //表单元素的类型,这里为textfield
$ b# [0 u  W/ {, u7 r8 J1 D  '#type' => 'textfield',
4 m7 F# A/ s$ ]  //这个表单元素是必填的
. n, q2 E: A, M# F* U2 g0 |  '#required' => TRUE,9 W+ O8 J4 x8 Q4 C8 K" X: @  ]
  //表单元素的默认值,这里使用了三位运算符和isset进行判定
( N6 B, E4 \+ n4 h( N8 w2 J- y  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
$ g( g1 y% r2 Q& V7 k3 Q  //表单元素的描述,/ q2 y& _2 A1 q$ T' i2 S* ]
  '#description' => t('例如:周星驰'),
) K, J* N6 K, z0 @% G1 N1 N$ ` );
) @+ [4 g9 q& H% ?" e8 O0 g
9 F( G2 C$ P1 l. K  Z6 f( V2 Y  //表单元素“单位名称”
8 |, A7 P& q# h& i* u& j $form['company_name'] = array(6 J5 E. G6 M& Z* g2 R  V
  '#title' => t('单位名称'),
0 X2 N, S0 }9 i4 l4 R) w) x  v  '#type' => 'textfield',
) S! R2 Q: E- }- d8 L* c5 j* \: K  '#required' => TRUE,2 W" t3 m' k2 c
  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
& }1 J3 ^$ x& T( l  '#description' => t('例如:北京无名信息技术公司'),
+ ~  i4 p, C2 Q( @3 p& i6 ^, S$ d. W );* M  J: e6 y, S; _

" m6 B5 k: ]- ]. \( K  //表单元素“电子邮件”
) |+ y- w, U1 [. _  B $form['mail'] = array(
6 G6 z- a& l! ~) A# i7 n: G0 b  '#title' => t('电子邮件'),
0 M* _' ]6 t, q4 x* Q7 x; p4 n- e  '#type' => 'textfield',
/ o, K& E( s) p  '#required' => TRUE,& V0 X$ u" B& [" ?' T: v% t1 k- a
  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",4 V0 Y" K2 S- n0 }& l6 X
  '#description' => t('例如:info@example.com'),
" T& M, T* s5 [ );
$ j% s2 h8 ]0 a! L6 i* w * k# s1 [  H, n% C1 f- G
//表单元素“电话号码”
6 r' Q# v8 d* M# E. n4 J0 r. k $form['phone'] = array(
. y3 M0 U- t5 Z( d; e: r  '#title' => t('电话号码'),
4 i7 ?6 y' a  ]; F* e& X* o( M  '#type' => 'textfield',6 R. M% U$ T; A9 P4 o6 E( H) X
  '#required' => TRUE,
: f! F0 T3 H3 R# t  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",2 i6 c; \. ~3 G- q
  '#description' => t('例如:010-88888888'),
* ]' y. Q3 b3 s );
1 |" s6 `7 i  S9 ?+ t % F3 _5 D* @( N" |1 J6 E% ]$ P
  //表单元素“邮件正文”) r& @9 e. j/ N  q
$form['contact'] = array(
1 J& {& r' W/ W, x3 {2 p2 @/ X9 Z  '#title' => t('邮件正文'),/ w# `8 Q% ]# R5 P* r
  //表单元素的类型,这里为textarea5 F: k9 z# L# t" c1 P0 \
  '#type' => 'textarea',) B5 A: i5 Z2 A# ~! E
  '#required' => TRUE,
' A- O0 Q4 m, G8 w  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",! I# K9 v! J6 @, U6 [% }6 x
);
8 K' g! p# b2 I
, e" x/ Y7 _1 `  G //访问来源的可选项
- l8 r9 j% x/ `! |! h $visit_options = array(
5 ?1 @+ U2 _* f! @# Z2 y  'baidu' =>t('百度'),
) J0 z5 W! `" F+ V2 R& \  'google' =>t('谷歌'),
. i3 A9 j5 f  m: e  'sohu' =>t('搜狐'),
0 m- a; x: U  i5 }" I  'other' =>t('其它'),1 v" Y7 g7 W) N% F! r2 `
);/ F+ [. L6 F0 `" g" B
//表单元素“访问来源”
# N+ S4 r7 R/ E2 I# A& m! M $form['visit'] = array(
! f; J$ [5 s6 W1 R) u2 D  '#title' => t('访问来源'),
' B4 A# F7 T" k; P" U! G  //表单元素的类型,这里为radios9 d0 u1 z+ w. Z
  '#type' => 'radios',, q8 D; l, y+ \4 F- Y! M
  //单选按钮的可选项。
  n7 ~, m. e# V7 e" O' J2 J4 R4 r# H& g  '#options' => $visit_options,
/ E0 m4 `0 m6 n$ [) t  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
3 i" W, A' @# w* f, T  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
! L- W3 t" p: q0 R# J  '#prefix' => '<div id="visit-radios">',8 l1 i: V% B8 w( \. E; T- N( `# y
  '#suffix' => '</div>',
! P$ U) U2 T$ b* y) J1 J% p );
& S  f- v) n! A5 f/ _ & F9 m. Y7 Q0 z( ]% N& g
//表单元素“其它”,它依赖于表单元素“访问来源”
. R) M2 ^# _* l1 f5 R6 D $form['other'] = array($ }' H4 m* f! ?- ^' X& H6 @9 Y6 j( j
  '#title' => t('其它'),+ {3 j2 j$ e: `9 {$ t0 f
  '#type' => 'textfield',2 C( S6 h6 W& Z9 a# ]) r0 ]
  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:""," M4 k( C) g. c3 a; ]
  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来
. R. _9 r. `7 g  A) E   '#states' => array(
9 V0 H5 c- V! b8 }    'visible' => array(
/ h8 k  C2 c$ w6 r) N     ':input[name="visit"]' => array('value' => 'other'),
# T; G! M3 {' E! [8 t   ),
0 Q/ g$ N0 S& Q6 E, V( y+ W  ),
. n. f/ Z7 k/ H% b  P );
  r( p( l+ t: g2 \  t; A /*9 I8 v# A6 E  [9 B' a# S+ I; a6 q
//表单元素“确认”提交按钮+ _9 ~( ~0 M5 b0 r; F
  $form['submit'] = array(
4 ?# g, @- k) }2 g6 P$ j    '#type' => 'submit',
) c+ P& K# T1 D9 i* K) `9 D8 o    '#value' => t('确认'),; M+ E" M$ Y/ q4 @
  );
! v% V1 p3 K$ u+ S1 P$ h% }  */( i! p2 E$ [& V8 X* Y
" \- G( o' H' w! L$ M' a5 @1 @
  //表单元素“确认”提交按钮,这里采用了图片的形式* a! O  a0 q$ v4 \
  $form['image_submit'] = array(
4 z- I7 e  S8 A# k$ X; O7 _4 I6 B   //表单元素的类型,这里为image_button# V- _% X* M) O9 k" M+ ~
    '#type' => 'image_button',
% e$ o6 [* w* k; N1 q& h  # z; e  v# h. \& c7 n/ l8 W, O
  //图片按钮特有的#src属性," h; w) u9 G& W& L3 J- ~! {8 p
    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',/ ~1 ]9 Y0 `% o: i+ W# e
    '#value' => 'image_sub',, l' U8 A" }6 u1 J
  
- c5 U, U, M: P7 h4 p+ |0 J6 u  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果' L5 W' D9 e! M. A* L* L: F
    '#attributes' =>array(; ?1 i; A6 M9 i+ d" e7 V. X
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'"," |/ C2 [7 p* d- ^9 _- E8 d# y
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",) L/ f/ {7 z8 q- ~8 a
    ),
2 @! ]( P' H! r5 U2 R  
' ~0 E8 ?( J" D, m) m* f  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div. g4 G9 x$ J5 c" W( i
    '#prefix' => '<div id="image-submit">',( O! p0 ~. a* u
    '#suffix' => '</div>',) x- g, t( Q0 ]6 ]: }
  );  return $form;, b( S5 Z/ N3 K4 v/ Z8 D! i: j
}/**
9 ?! D) v( s* x: ^+ Q, c2 B * contactus_form表单的验证函数) ~& i5 O. ?, q) I6 h! a# K1 _+ w
*/
! ?' [5 f1 A% Wfunction contactus_form_validate($form, &$form_state){# p/ h. R3 X  A2 G2 {
  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。# Y) G" f/ T/ \( _8 S1 Z! Z
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){( W* L8 |& ]3 x+ [* L
  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));
$ c; a4 m! Z  I }
# ~7 _+ ]$ B. U$ ?  [" o" s}/**6 B" k- a* M5 V  z: {& E
* contactus_form表单的提交函数
3 l, @) O. Z' G */
# r' Z7 z, x9 @' N. C) L* Q3 Y; t0 {function contactus_form_submit($form, &$form_state){- [8 R# i# s; b# Y9 R
  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。  U$ `: {( H. P5 z' a
$_SESSION['contactus_form'] = $form_state['values'];
% W5 P# a( ^( `$ }3 g //表单重定向到确认页面
6 x- {5 M# h0 W+ H" m  ` $form_state['redirect'] = 'contactus/confirm';
) h. i8 h8 o2 Y3 J. I6 J. D1 e" O1 U: z7 q) I. P, o1 ^
7 V( _, Y* C# f# ^

0 R' ~& i5 u# g) ~- W4 i; {5 J2 J3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
1 W( \3 [2 R0 v+ b9 m * “确认”页面的回调函数& m- A1 T4 n% X8 D' f4 r
*/  a! a8 ^% c. C( k+ j* H- L
function contactus_confirm_page(){7 k  ?1 j3 O! b
  //我们为这个页面设置标题
7 E! o4 g3 L" K" Y" K drupal_set_title('联系我们');- q5 S  n3 d2 t! Z
9 }! |- f1 k5 H6 x. Y$ j3 \/ \
//这里首先作了判断,如果会话中没有设置contactus_form,返回contactus! n0 J$ n1 N6 O; X6 k# z6 Y
if(empty($_SESSION['contactus_form'])){
  h. T, O+ s/ w  drupal_goto('contactus');
# W* u) v4 S/ h) M' m }else{
% w0 W: \8 _& m% K/ } } $render_array = array(1 U' M9 @5 C; G9 E; e# x
   '#markup' => '',
( S0 @+ n. e$ Q );2 ?& S  X' U0 U$ J+ P. H/ |  d: p
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
2 k/ P1 D% n1 A $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));
' Z6 [% t5 h; u1 t. l: v! @1 J //Drupal7的页面回调,返回的应该是一个数组% @6 N1 V& p& X
return $render_array;
, t/ a  S2 F: u' s* p: y) @}/**
; o# H( K/ Z) \ * “确认”表单的构建函数
& G0 s6 ]0 A; N0 j */
! F# C; O5 c/ ]5 D# X) Ufunction contactus_confirm_form(){8 O! }6 w' Q, O2 `
  //添加我们自己的CSS,用来控制表单的样式
1 T- ]! l# X/ s/ o; i+ N6 K drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
7 \+ h2 t" R( [- ^# @* J //drupal_set_message(print_r($_SESSION['contactus_form']));7 C( @* Z5 I0 ~( k; r3 O
//表单元素“姓名”
+ |/ @' g+ ~- F  }9 p4 m1 o$ P# W6 O$ u $form['name'] = array(% A7 o/ o+ A' N
  '#title' => t('姓名'),5 w$ u/ r! b  z0 e
  //表单元素的类型,这里为item4 M3 I: r# r" M" O4 h9 o
  '#type' => 'item',/ u6 L0 U- `: Y
  //'#default_value' => $_SESSION['contactus_form']['name'],4 J. e& p* D% n$ q2 I8 [' N! t
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,% X% E4 q6 d, u( R
  //最后改为#markup,才可以了
0 j2 v/ F3 f) G$ a: J) e, Q( M" B% u  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",1 n/ b# ^+ j, J) ]
);
7 d5 X5 V6 X- r: i
# }2 r$ l2 c9 H$ j; Y$ I  //表单元素“单位名称”
. g6 C8 A( c% R" I' I6 E' K, r2 G+ d $form['company_name'] = array(  s+ N+ u: P8 }1 I4 P' \8 _, m
  '#title' => t('单位名称'),
6 ?" v( o) H8 ~4 e+ Z+ n7 O  '#type' => 'item',% D8 I, @, v- a# ^, V: I
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。
& R  B* k, m' @4 L. h% Y6 q) e  //'#value' => $_SESSION['contactus_form']['company_name'],
3 j7 C" m$ ]. S& G- M  //'#value' => '123456',* o8 B+ R$ S1 t0 b
  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",1 J% a8 h' B( p  `) ]2 J8 q3 p: C
  //'#description' => '123456',
! T) q5 |- A& `2 h, m9 F* q% q: ~; } );% }  J  ~4 v1 N4 R) q

( K8 i+ `7 J2 N4 C$ C  S //表单元素“电子邮件”
- }$ R; R, a6 i+ Z $form['mail'] = array(
% j/ ~7 O4 Y3 K& u  [% j# r5 J9 |  '#title' => t('电子邮件'),# C7 N* s6 D6 q
  '#type' => 'item',
  e) U* p4 b: \  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
/ Z: h3 q3 x3 }2 Z0 o# f0 z );7 X" F. h! n! ~; }' c( [$ k' Z+ T: ]
' T3 a7 a8 i: P% N6 a
//表单元素“电话号码”' ?( o- J7 t, @, a8 ?) n
$form['phone'] = array(. r0 f  @8 u0 f) o% ^
  '#title' => t('电话号码'),
; G- a& O/ d. s- R" d  '#type' => 'item',8 ]+ c6 G2 q! C: M. v9 u' e" t& S7 O
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",5 Y+ c5 u; W- @9 w- L' B& M
);5 [* u+ h  C( W. ?7 X/ `& p( a
- H& @" M1 E. |- f
  //表单元素“邮件正文”. ~* T' [" m' ]& d
$form['contact'] = array(
8 P5 {: T% _9 |1 C8 \' s! a( d2 ]  '#title' => t('邮件正文'),
/ k( ]1 H6 g* F: s: _# M  '#type' => 'item',6 M" R  Q- Y( I5 W$ f8 X2 d
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",! @7 F7 V9 e$ u3 F* ~+ V
);4 y1 j" T8 O4 `; z
: n! t" @* U( N. C% t+ L
//表单元素“访问来源”
8 f/ i6 T9 X# L3 ]( l* b $form['visit'] = array(  T7 t. X1 B3 X6 F) v( m# w
  '#title' => t('访问来源'),/ u" Y$ x1 x: a8 }! V
  '#type' => 'item',) ~2 g' I2 v7 |- o
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
) h3 |4 |" o/ Y1 x9 [% s" \ );: w% [4 m) z, B. z5 X( P
# X5 u% @9 I2 G' j; P7 m# r! f
//如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。' A8 i4 K8 s, Q0 ^4 O
if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){- K" j! ^' ^/ _( z. H
  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";
' N* b( [5 [. M' b+ v* [' i } ; w& t7 Z; |  C+ ~
/*
! U6 I8 }5 ~' d //表单元素“返回”按钮
! v' ]# l) J# v# Z2 X' l  $form['back'] = array(
8 E3 e; L- M) y  T4 p  ^; p4 ^    '#type' => 'submit',
8 U! d7 P1 {: B( i; `9 C$ j    '#value' => t('返回'),
. d  t& W" c. ~    '#submit' => array('contactus_confirm_form_back'),
9 e& S$ ~7 a7 |5 Q  );' A% n5 _9 W+ W$ y- X5 D+ E5 {/ B
//表单元素“提交”按钮
% w; q6 Y+ u+ X/ ]6 U3 h. Q- [9 e- l  $form['submit'] = array(
0 k- I( K1 S7 W, y! T* R, ?$ i    '#type' => 'submit',6 U8 q( i# `1 d, c) [
    '#value' => t('提交'),
" t$ O6 r8 S, N, i  );' D% j, H, J0 Y) n3 f
  */5 D/ Y# R* @6 O0 z/ V5 g$ g& ?. h
4 s% {& ]! s& ~' M6 j# |. r
  //表单元素“返回”图片按钮
, T$ d4 j: f& s+ B# Z9 v$ W  $form['image_back'] = array(: N! ]& {$ d' {9 G
    '#type' => 'image_button',
8 \' \1 _7 i5 V$ b! t4 ?    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',6 U: n% r$ C- V7 E$ ]' Z
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back1 z5 y. i. ?# V2 f" @
    '#submit' => array('contactus_confirm_form_back'),
- u+ [$ ~8 s7 _! p    '#executes_submit_callback' => TRUE,
: ^4 B; P& z$ M8 m! Z. r" J1 I  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
/ U$ _' o8 w3 M& Q    '#attributes' =>array(5 ?5 w, b1 @( j9 Y# E/ P
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",
$ a  ?* R" F: e      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",2 `3 d* A# `# u4 M
    ),* U& X4 s+ h( n, q1 J4 O1 g5 k
  );* R1 Z4 W' J* m, _
$ ]$ o$ Y, t3 P2 }  W& [
  //表单元素“提交”图片按钮& |8 N5 F' O  M9 {
  $form['image_submit'] = array(
( b, x. a! \" ?+ Z    '#type' => 'image_button',
' u8 i3 l/ d7 L    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',( o3 y( p% m1 X) P6 y  o4 K
    '#executes_submit_callback' => TRUE,
* `1 Q- `% Z! n* [. u; ^8 G2 F  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit; `- q1 G4 {& @6 ?
    '#submit' => array('contactus_confirm_form_submit'),
9 X% X' z5 k/ B1 G. u+ r    '#attributes' =>array(# c0 b. ]! ?" `% V: Q! o
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",
7 @5 c- b: D/ D& C% c      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
' H1 Q+ e7 k" E7 }    ),) ^7 R! N; _( _) ^' d
  );
3 E) t* f7 u- z6 I  
0 l) a3 ~+ @* a/ j% ?  return $form;, X) N5 d) O& D. v, G0 W7 P9 O
}/**) x" v2 G. O( ^
* 返回按钮对应的提交函数/ _! N7 M) i3 A$ m: D: V
*/
$ y0 m  Q5 X3 s' z% kfunction contactus_confirm_form_back($form, &$form_state){
& r) o5 k4 B& L% h' |- ^  //简单的重定向到contactus页面4 L4 |; B" L9 Q3 b5 t& g! e1 f5 E
$form_state['redirect'] = 'contactus';
$ Y! T7 X0 {/ {/ V}/**
# \4 ^0 u6 c* @' O  _ * 提交按钮对应的提交函数
0 z3 K7 V. Y. |& K0 q */3 q) I5 A0 k4 m( |- M7 Z
function contactus_confirm_form_submit($form, &$form_state){
6 R! R( h# X1 n5 x, ? $values = NULL;1 e. W$ L# e. T- d( D
//从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。
6 F! M1 U9 q1 Z if(empty($_SESSION['contactus_form'])){# S+ ^  g# ^3 o! @3 k1 G
  drupal_goto('contact');
/ ?) M. H' N' s& ]4 s$ Z$ L }else{
5 X% k. H. D( _8 b8 {  $values = $_SESSION['contactus_form'];
4 c- V1 p5 ]  _- R, Y; P  unset($_SESSION['contactus_form']);( v5 j9 X# k0 d
}
* Z" J& H: X% D5 I2 Y
' T5 w! e9 c+ ]' y' V9 M1 p4 b //收件人地址,这里为作者的邮箱
* Y9 S5 r$ U' e1 C5 n6 j# r# u $to = 'g089h515r806@gmail.com';: U' y  v4 H. A# b. i- C5 \8 r
//用户填写的邮箱地址
4 p. m3 T3 P* @5 m( Q $from = $values['mail'];
# U! L/ s9 B! P
6 @3 K2 m9 v$ o( i' i //发送邮件5 a2 ~; P7 F8 m8 J: E) r0 e$ o
drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);
/ f5 J% K$ }5 }' u! l! |- H
- P7 d. }8 [8 J9 T- O- y //简单的重定向到致谢页面- l$ w% G" f6 q( Q! ^4 s: \
$form_state['redirect'] = 'contactus/thanks';
- n- y; b% b  Y# i) \}/**
; F* D8 j: e  D * “致谢”页面的回调函数
- f% W; d* p7 } */( `+ w1 d' L  Z/ v( l8 _% K4 B2 t
function contactus_thanks_page(){
5 Z  N% i) Z: Q7 {' p- C0 Z9 ~2 w  //我们为这个页面设置标题
! B2 G; X0 H. W/ \ drupal_set_title('联系我们');
9 `. C  u; A% b0 p) s- v) | $render_array = array(
. E% ^2 k" R2 m   '#markup' => '', 8 x5 k6 m0 d* ^; j& ?0 W" h& g* Q
);
4 f) b" p; H( I, e) n* ~! Q3 [ //Drupal7的页面回调,返回的应该是一个数组4 Y/ ?7 ~1 g6 M) B2 C
$render_array['#markup'] .= '<div id="contactus-thanks">';1 o) f# K% Q( I' |
$render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
/ B+ N5 G/ H% a, E% Q $render_array['#markup'] .= '</div>';& i$ {2 N( {6 |* T" I3 l5 s& {

1 _9 n4 q6 z0 g1 c% A7 v return $render_array;
' r- H9 S( @) `. J/ Z}
4 B5 u0 ~/ x  x- X- R  F  _6 r6 B" y
" `7 O; {" @( O

2 Z' X% _" s# r
) z, L. d7 o+ M  Y! R8 {* q% ?$ {0 v' \
: S! w  A8 m# W$ H: a

8 |& m: U0 a+ [) R. ]1 X' H* N; s

( N2 v1 u% \) @2 T+ x5 L7 ^
1 S/ g( L/ ~) ~+ k- A( `" G
* ^' p* Y9 E6 r6 n! i0 Q; |% S/ v7 C+ E2 P4 O. e/ B

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

GMT+8, 1-11-2026 03:46 , Processed in 0.242931 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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