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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分, R1 K3 G* W- u1 s% s
<?php5 [* \2 C2 V3 [
/**4 @% W! f7 m1 y, S
* @file3 g" `& h1 H" E
* 方便用户联系我们.# b8 k9 y5 G0 f$ z& E; {
*/
* u2 a6 Z5 F- d# x/*** U* E. D5 ~, A( M% a8 F% [2 Q
* 实现钩子hook_menu().
4 H! O4 }/ G8 P4 l */1 ^  \) @2 {+ x& M6 O' |% }$ _
function contactus_menu() {
+ {5 s1 J( |: P; x! u. z! n& v- F  $items = array();
4 h; Q. K! b7 ~' S1 o" Q% E //联系我们菜单项! R) T: o5 O6 [( B# g" D
  $items['contactus'] = array(
8 _0 Q* S) Y5 q% W( H9 @& b    'tilte' => '联系我们',0 r8 Y0 g% m' \: x; m- S' F
      'page callback' => 'contactus_page',
6 I6 d6 d* K% T2 H5 \      'type'     => MENU_CALLBACK,' U( D, I. K" j6 s8 S* G
      'access callback' =>TRUE,
9 h: T7 y2 `8 S8 c0 n   'file' => 'contactus.pages.inc',8 Y/ E* j$ j- ?3 Z( _8 b0 S8 k
  );
3 W4 d' L: @' \; O, m  u //确认页面菜单项" \. x+ C$ ]. Z3 B
  $items['contactus/confirm'] = array(
# ]1 h' ?% L; ?      'page callback' => 'contactus_confirm_page',! p2 T. d7 h. E2 G3 d( e$ k
      'type'     => MENU_CALLBACK,4 M+ G9 D, n: C
      'access callback' =>TRUE,
6 F8 r0 b1 @: f9 X* V4 o9 \   'file' => 'contactus.pages.inc',
: a: A2 n: \- i' X2 l$ ]  );& E+ K; k' ?2 O' L" O$ T9 j, P
//致谢页面菜单项7 x, W/ J$ x1 [- N  R1 l* f
  $items['contactus/thanks'] = array(9 {0 {: ]4 f% H% r% X5 @
      'page callback' => 'contactus_thanks_page',
1 `3 j) u9 r$ E( r1 B  p# ]      'type'     => MENU_CALLBACK,
, `# L/ l9 F( e      'access callback' =>TRUE,
2 j8 L  c; }4 A5 a+ X  u) r   'file' => 'contactus.pages.inc',1 p) Z5 Y: {4 D, X; T$ G
  );$ j2 u' ]5 l! h( N8 U0 l
  return $items;
1 b, Y6 g4 J! S: z. X}0 e& C6 _. z& M! h8 b0 N
/**
6 l/ {# {6 b; C% l * 实现钩子hook_mail().# y3 ]1 b4 `3 g1 S2 _8 o
*/4 A+ W: h- q! Q3 d
function contactus_mail($key, &$message, $params){- |' P9 O) C9 h9 m; n
$language = $message['language'];4 L* H7 d2 I' P. q
  switch ($key) {8 i* i# `0 F$ C. q. |( C
   case 'contact':
4 Q# q% z& j3 ]8 @. g# P, ?  R  
( c% A1 o' ^7 c3 ^+ h/ o1 B$ X    //邮件的标题
. p% i9 y3 S4 Z" ~$ U- V    $message['subject'] = '联系我们';& V/ I4 }* ^/ D: }/ z0 h* P4 X+ m
Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分 % o2 Q6 E& @' A  w. a
  
6 u4 g, Q3 i, ]0 G   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源
1 u( O+ i- ~- x* z      $message['body'][] = '姓名:'.$params['name'];6 w& b3 ~. T' G8 b4 m
      $message['body'][] = '单位名称:'.$params['company_name'];
5 [. n* h, ]/ \% ^+ ]2 h      $message['body'][] = '电子邮件:'.$params['mail'];
2 O% d- S, T& v$ D, M9 i( G# X( {      $message['body'][] = '电话号码:'.$params['phone'];
; _" B  H: l7 e0 d" k& _+ i5 \      $message['body'][] = '邮件正文:'.$params['contact'];: Z, M3 ^0 i9 m+ S/ Z5 f5 u2 z
   
& j6 _4 S# t6 Q3 E2 X% ^" y; b7 B      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']/ s& c8 Z5 A, _$ g8 M) f4 x9 Z
      $visit = "";$ Z# A; j8 ~/ F6 ]% e
      if($params['visit'] == 'other'){4 f. D( `$ T4 n, \
        $visit = $params['other'];
: N! D8 @3 v0 N      }else{
) u- N8 C3 H- k        $visit = $params['visit'];
* F7 H% t5 X4 M: l- }      }0 q/ c# _- O. @2 p
      $message['body'][] = '访问来源:'. $visit;
* }' L* @' f; ^" P; l! W' m9 U  }
" Q1 M0 ~& u( q8 s6 p}
7 Z! V; y1 q) y+ \# y/ u* {, L: [* c

1 Z2 k  H" T, D( O7 T# M6 P- p* \) j9 k! z. u; T- T# _

: h3 Z( Y8 s1 @' Z3 \5 L6 {( w' R7 u2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调* l$ n  |5 y9 n+ E; v+ }
<?php/**
# f, p) t7 |# V+ H * @file9 L" h- l" M; j
* 各种页面的回调函数.4 c4 g( [. ?: B, a5 m) R% q
*/) D. D# y; v1 \0 I- k& R

+ d2 ~( Z' d* E7 a$ T, |/**
: d, L7 m) |' J& L: |6 E4 F, l2 n7 z * “联系我们”页面的回调函数* f7 Q" Q9 c' ^" Z
*/
/ @6 O, ~" J7 R( L: Ufunction contactus_page(){" i5 u) T* \0 F3 {
  //我们为这个页面设置标题" C+ ?0 i/ \) t3 G" V+ {5 E
drupal_set_title('联系我们');
3 w4 ^5 z% |% Z  X( |
- J7 V# D; |* C6 {8 ]( |( n $render_array = array(
! e( O9 P* z. M0 Y0 p   '#markup' => '', 1 b; r+ E+ h* [4 z8 e
);
4 B& l/ O% m) ?) ~* p- y1 `! }
. l3 f. b% X) x //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。2 G( W- _/ Z4 u8 K8 `
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));
  z% K9 }5 q* H) f! g  i $ F( y' A) {! w  n9 d( `
//Drupal7的页面回调,返回的应该是一个数组- j/ ^4 F0 P0 L# u7 L
return $render_array;
  c# v+ g4 O1 B6 x: P}/**
4 B/ L$ e; x. g' G5 v7 s4 y * “联系我们”表单的构建函数
3 k) u1 s0 j5 T7 O6 b */
9 G- S6 C: r0 J7 Ffunction contactus_form(){
! H' F, M6 \! X7 g2 Z+ r$ j% I  //添加我们自己的CSS,用来控制表单的样式: q1 p7 G  E( e7 o/ L
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');5 \! ?! P4 _' T) \
) M5 X4 T) \5 }& u
  //提示信息,默认为markup类型。
/ r7 Y2 f, n% w6 T* k& F' l2 \ $form['tips'] = array(
8 z* H% r2 L( V7 ]" s  '#prefix' =>'<div id="tips">',& W* e5 Z, |' Y1 g% |: M- M/ P
  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),
0 u0 I  Y. B: V4 ?% w  '#suffix' =>'</div>',9 ]. @' X( y4 _
);
% a5 ^, ~% Y8 K* z: Y- u9 K
. O- ?0 O7 l7 k  z$ j4 X  J' I //表单元素“姓名”
) @9 |$ u( r+ X2 X! {  x3 J $form['name'] = array(
$ L; ^9 b5 u6 V* e: R   //表单元素的#title属性,对应于实际输出中的label: M+ N5 ]" U- ]6 ?+ r$ D! g
  '#title' => t('姓名'),
, J) n6 r" U/ d& M( Y9 q- S! A0 x  //表单元素的类型,这里为textfield
9 }7 W& [; s( h# p& F; d5 x  '#type' => 'textfield',) V1 z( g2 w) C3 N* R
  //这个表单元素是必填的4 R6 F* C# h& `* {+ I
  '#required' => TRUE,# m, Z$ E7 w* i) v4 A
  //表单元素的默认值,这里使用了三位运算符和isset进行判定
  q+ o( d) z2 D- G  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",3 _4 w  ~8 G. z
  //表单元素的描述,
# B" l* w0 ^9 y; Q: U4 A  '#description' => t('例如:周星驰'),
/ F; k- h3 \; k7 j. T' ] );9 X9 j4 F' q3 {# M% v

: R1 N# H% \8 Z" ~  //表单元素“单位名称”2 N% b6 I3 n3 D6 b8 x* U
$form['company_name'] = array(
5 p4 G& t6 L/ t* q& ^7 P" C: {" R  '#title' => t('单位名称'),1 D. D4 j) h  f+ V1 `
  '#type' => 'textfield',
. ?' Y2 d: I+ g+ E8 H5 e  '#required' => TRUE,
! t. V' Z6 {, t: i! y4 v' P% ~* A9 G  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
+ y) m0 Q* D& c' ?  '#description' => t('例如:北京无名信息技术公司'),* ~. C0 N) e  G( q
);
" A' P+ m8 c5 N* O& ?
' Y  I# b% [; e# G* T' j6 ?  //表单元素“电子邮件”" }1 `  i$ p. N0 ]8 B1 @$ t
$form['mail'] = array(  M8 ]; i* U0 X  z, U
  '#title' => t('电子邮件'),
$ o" ~" J$ q6 j1 a; P8 o! n8 y  '#type' => 'textfield',
# o3 w2 y; \6 n3 j9 _  '#required' => TRUE,
4 t" D/ i) ~* _: X7 U* b( L  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",7 Z# I5 ~) s) x9 |! T$ Z- x
  '#description' => t('例如:info@example.com'),% s8 |' \1 ^3 p8 u$ E0 a7 ^
);
( t9 z5 r2 ?  }4 g. z5 }3 t! R
4 i1 y: d6 L" e5 H: g0 E6 r //表单元素“电话号码”5 A9 s! H' ~' G9 y( K% P! d
$form['phone'] = array(" x4 T, W" u4 r4 @1 D. o6 J
  '#title' => t('电话号码'),
0 r& O4 E/ T: I! }0 S! Q* d  '#type' => 'textfield',
  G2 @9 c. o& E9 ^  '#required' => TRUE,8 e( {+ @# M$ h5 E3 n8 @# [7 J
  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",# [' I% L$ a) A% X& l
  '#description' => t('例如:010-88888888'),1 A: a( \% b0 f' {
);
% @0 t* }  h% U) l$ J
5 G' \4 F* y, O3 L/ f5 l; w" J  //表单元素“邮件正文”- s1 R" h8 x' U$ U( J* T( w
$form['contact'] = array(+ V$ f* d5 k; a0 v
  '#title' => t('邮件正文'),% Y5 z2 M4 i! I" J; M  I8 |$ b
  //表单元素的类型,这里为textarea
; n8 s7 A4 x1 j$ J! u  C  '#type' => 'textarea',9 z9 w4 K8 S; c# F* _9 W
  '#required' => TRUE,
0 r: t; ?! t7 @" ]  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",+ Z, O1 H% P) l' b4 {8 Z1 E
);
/ c9 o4 W. h( k1 [; ?( [, p* b
! R7 Q& j# V9 P8 W4 G5 D //访问来源的可选项
6 p2 `  O- A( W4 \2 w8 s $visit_options = array(7 X, a  y9 E+ C/ v0 E
  'baidu' =>t('百度'),
1 i7 B1 o; v. ]. p  'google' =>t('谷歌'),4 e2 p3 K' Z- D
  'sohu' =>t('搜狐'),& E! G. J: n% b: e$ r1 c( ?
  'other' =>t('其它'),
* F  x, y  F* i );
- ~& U. i# Q4 \% v$ Z //表单元素“访问来源”) Y5 t5 R' T: A3 i- m4 R4 R6 n
$form['visit'] = array(
" k! W* t! m' D+ n& |+ |  '#title' => t('访问来源'),
! ^9 _. Q! z. S5 S) J  //表单元素的类型,这里为radios7 {$ J! B, m: S* s
  '#type' => 'radios',1 P: ?8 P, O% @9 p
  //单选按钮的可选项。7 x: L% Z; J$ V" @( d8 w/ [. X
  '#options' => $visit_options,
; `" X! c1 B' V$ G3 X  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
2 O6 z2 P4 m% c  T9 B2 W1 Q  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
. u, }, x- O7 b' N  '#prefix' => '<div id="visit-radios">',2 j9 _- T- R7 W7 A- b- U5 ^
  '#suffix' => '</div>',
- {& m/ q) s* i4 z+ w) R );
  j4 q6 b, u, R* Z0 J' \ 6 i# Z7 q1 V/ a) e! j
//表单元素“其它”,它依赖于表单元素“访问来源”
- H  p0 S* U6 G1 T& G $form['other'] = array($ k& V. X  T! J* X! O. J/ j
  '#title' => t('其它'),$ g" z9 h% V6 }5 c4 Y0 W1 M* i
  '#type' => 'textfield'," w9 l( x) j2 g& @4 Y) l' w
  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",, D( z, |8 I$ v3 E  z" u5 U
  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来
0 s2 ?# w, b  U+ @" S   '#states' => array(
! H8 M( o/ n# l/ C* {    'visible' => array(
  Z7 G9 R" k( r0 x8 ~     ':input[name="visit"]' => array('value' => 'other'),
5 E) b. b* c, ^7 `. l   ),1 o+ n& ~0 }! {+ x2 j% z' P" P
  ),8 J3 D1 U+ b& j9 J9 J4 l
);
: z8 x( D, L! u  c: ^! D! V4 J /*
: e5 w8 X- ~6 } //表单元素“确认”提交按钮; K0 U$ s* W9 Y2 [1 z
  $form['submit'] = array(
0 m( C; i" @+ x    '#type' => 'submit',( p* A+ a7 g; H0 o0 ]2 W" M
    '#value' => t('确认'),, U: s5 {) Q( t) j4 f% V+ a. v
  );
, L5 v9 m, T2 p  */7 R2 f" r' N# ]% e& q$ n% j

2 p1 o3 h# |  w* y$ I5 v1 w1 M; D* [  //表单元素“确认”提交按钮,这里采用了图片的形式
3 T! K$ O5 ?" R  r% X  $form['image_submit'] = array(
9 p( ?# v3 h7 P, o2 f" {5 T   //表单元素的类型,这里为image_button$ F9 k9 D. r( S* t
    '#type' => 'image_button',
- u1 |/ X* r/ t+ V  2 R' m9 \; v2 B* Y; h5 }2 p2 \
  //图片按钮特有的#src属性,
  F2 S$ d4 H) f$ u& `8 o    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',% P8 ]. G" B( c- F' k- ~. f8 k$ _
    '#value' => 'image_sub',
# J9 G( a8 m+ ^- l+ z' ?+ t* x  
0 O: J8 O; L6 H( l  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
0 |. s" K: I3 W9 u' U; b    '#attributes' =>array(! @2 R& X( E9 z# U* B) f! A+ @" n
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",8 k! l: }- |& \2 ~
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",
# x# ?; O, R3 ]* Y& b    ),  F' k' e7 G8 C( n' f  A
  6 _0 e) s9 G/ h. o0 A8 H% S
  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
1 C3 F5 ^/ a% E! u3 \    '#prefix' => '<div id="image-submit">',) |# T- S2 o, B% C" z
    '#suffix' => '</div>',
4 R' L5 r; [0 U0 x" f$ C  );  return $form;/ v' J, U# p3 A1 j1 F
}/**, I6 A2 s- e% o* Z7 c7 r! P
* contactus_form表单的验证函数. S& i6 w8 u. d" E* I8 ~% j9 o
*/' s+ Y" Z1 k& V7 T( ^4 H, c9 ]1 K" k9 y
function contactus_form_validate($form, &$form_state){; ^* g- O. n3 B4 v1 y+ @
  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。0 d; w# S8 l: ?: B6 M' B
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){
3 L& W3 M- ?, e5 M  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));
6 n; w* q1 c( j! \& U3 g5 v4 R }. _4 g- T( y! B9 {2 i1 _; ?
}/**
) \* F4 [' t9 R * contactus_form表单的提交函数" B7 L, p- q' J0 F5 d+ h6 A
*/
8 M2 `  D3 ~; Q' f6 r) Bfunction contactus_form_submit($form, &$form_state){
" b7 G) ?* ^' N6 g8 @  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。
  |8 d' p" h  d! q5 f $_SESSION['contactus_form'] = $form_state['values'];
9 [, J; m) R/ `! ?  ?. X# d4 g //表单重定向到确认页面! C7 r4 {8 y, |4 z' k6 `
$form_state['redirect'] = 'contactus/confirm';# @4 S% Y. J1 u
. M. J( W" D: D3 Q0 U) h8 \

# G. k' X& L2 Z: H4 b7 _* }- I) o) }/ P
3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
& t1 P! ~5 i) p" m6 o * “确认”页面的回调函数4 l" \9 g# H- Z6 V; y! g
*/
) ?  N* {' E- m, C6 Xfunction contactus_confirm_page(){
, p' G7 Q8 C' ?4 {, p& x  //我们为这个页面设置标题8 y% h+ u- R# F( I+ i* J+ \
drupal_set_title('联系我们');0 m  n3 G5 ?2 k2 F6 a
5 }0 h2 i. S9 Z4 E
//这里首先作了判断,如果会话中没有设置contactus_form,返回contactus" J4 e9 h5 ?6 ]4 v) m0 m
if(empty($_SESSION['contactus_form'])){" \' @8 a' g) F: m, t) ]
  drupal_goto('contactus');
$ @$ L0 \( Q; m5 n" \ }else{
  g* z7 z3 d" v3 T8 \ } $render_array = array(
3 k' S2 ~- R" T& E/ B4 U% S3 j. X   '#markup' => '', 9 U0 a' I: l# {  S) ?. @8 L( t
);& ^8 `+ \5 O- @, A
//该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。: }: N" v8 ]6 e& f; U* a
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));
$ S4 M+ u! K  O! A6 \ //Drupal7的页面回调,返回的应该是一个数组
0 [  O: ~& s( u3 }  s2 ^/ A. [ return $render_array;7 a1 B' b3 e/ ~4 G
}/**
- E$ ~* f( E5 m) b8 S * “确认”表单的构建函数
: l9 c9 [8 x2 y; M0 J! ` */( x1 @- h' v/ I4 y
function contactus_confirm_form(){
) S; g0 V* i% n/ M2 |, \  //添加我们自己的CSS,用来控制表单的样式
  d* Q  n# v* M6 Q7 l# Z+ x drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');( R# w0 |+ o4 L1 ~* G- W: G
//drupal_set_message(print_r($_SESSION['contactus_form']));# F; \8 g$ U1 f6 S! p2 M9 A; D9 ~
//表单元素“姓名”1 f; w+ Y, p0 m% y2 R2 l) w
$form['name'] = array(3 p1 C' a, j4 v
  '#title' => t('姓名'),% ^% K) K* Z$ N* s, [' ?5 o, Q
  //表单元素的类型,这里为item
* q, J) w$ F8 C  '#type' => 'item',! ~5 E( U. |/ r3 e7 p" m
  //'#default_value' => $_SESSION['contactus_form']['name'],, P- C. d9 _7 C9 B: U' s- L
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,
0 K5 h, }0 |4 `' U% t& H7 O  //最后改为#markup,才可以了
+ Z. c/ j! r- u, \3 ]  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
/ v: M% |# K& S' } );
. @* p9 Z5 R# c; G, A9 T0 \" i + r  b/ [1 f! t# Q; L) m' n
  //表单元素“单位名称”4 J9 }9 ?# J5 _- P% H2 q
$form['company_name'] = array(
  H+ D9 i# i' p! h- P: U7 n  '#title' => t('单位名称'),
% z% ]7 A8 B5 \4 U: S0 m+ X" q3 i  '#type' => 'item',
1 J& j7 o7 a4 x2 X! M  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。
* D! w$ P3 i$ ^; f$ C- g2 _7 z  //'#value' => $_SESSION['contactus_form']['company_name'],  J1 V- Y# Y2 \3 v/ ?7 N; S
  //'#value' => '123456',
  |3 F6 @+ p# Y1 k  K5 s  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",# @+ R8 G$ K: x0 y3 m* s" u" o( S1 `
  //'#description' => '123456',& P2 \) s- Q; K) }- c1 x- M
);
* F' Y- U; W9 T8 ?5 R   n7 G! S+ p$ g9 P$ I
//表单元素“电子邮件”
; ^4 z: W# J, N7 C# B1 Q/ D( I $form['mail'] = array(
* N2 W- u/ S1 ?5 U/ H  '#title' => t('电子邮件'),
0 G" v4 L( r8 O3 b, R  '#type' => 'item',5 ^  O& G' U3 d: s, E
  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",# h2 o' h2 Y8 H
);4 S& c  b! p6 l0 h, d+ l; A9 H
+ X# K" w; q8 ^: P
//表单元素“电话号码”8 z. c$ {- N+ l
$form['phone'] = array(
+ }8 k: a7 j  x0 h9 x; e  '#title' => t('电话号码'),
/ N! l# ?8 e0 L# x: {( w  '#type' => 'item',
/ f/ H7 c8 Y9 P! [- r6 }) O  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
, X; T1 b$ t! u+ d );+ P6 U' e: k+ C9 Y7 i! q7 q4 K

9 U: C% C: G  D# {. _  //表单元素“邮件正文”$ h) r. d5 H! ^% i4 ^
$form['contact'] = array(3 P1 z% P2 ?' o7 m$ \
  '#title' => t('邮件正文'),
% D! c3 H6 V# i; b  x: I6 X$ Y  '#type' => 'item',: [+ g9 F! I6 D4 H( r
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",  H# N6 a! q; `* I6 r
);+ ?& B2 c. G' r# c, h& o
4 j: S2 B0 @- g  _! t! F
//表单元素“访问来源”
! S- I2 h( ^- s* ~* U! K $form['visit'] = array(* Q# f7 h1 ]/ ?9 C; f! F1 H
  '#title' => t('访问来源'),! e. o6 r3 H" V$ |2 ^
  '#type' => 'item',( H/ u2 H8 C& u0 G3 C
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
3 Y6 p* s! s' {/ d );8 L' J& Y# `+ u: Y; O2 l

3 L; a/ @7 L" a //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。9 G1 K# u$ X! G3 v; s! J
if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
# \; D% T, d$ ]/ c+ s  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";
2 W$ l( |# ~( ?- M1 O }
* w. m9 F6 B0 K; }6 U: x* p /*. r) K6 T: i" A! ?6 n
//表单元素“返回”按钮4 v* g1 H$ ~: t7 p) o
  $form['back'] = array(
8 u4 @1 j1 _+ ]6 n! d    '#type' => 'submit',
* t- r2 {- S! K0 h    '#value' => t('返回'),
, a  P" q! [4 }' d% f. f+ v0 N    '#submit' => array('contactus_confirm_form_back'),  X/ M* d" ^/ a- M
  );5 K9 E+ a7 p2 }4 _$ x
//表单元素“提交”按钮
5 x, F/ M9 F' C4 v0 M8 H  $form['submit'] = array(
. f2 K" O3 K3 s6 c; l& q2 q    '#type' => 'submit',
& ?$ L8 N- x# S- c! S: S    '#value' => t('提交'),5 L! X: c/ `+ b. M  @9 F( q+ L9 b& I5 r  p
  );
7 q- j6 W( d* s( W1 j. _  */
' |) y3 H- p& S- h" W
2 o& j: X+ ], Y  //表单元素“返回”图片按钮
; y" z' w% W6 n8 y: B  $form['image_back'] = array(
! ]1 y3 d1 v/ t- g# A# c9 t! o    '#type' => 'image_button',1 b+ U! j- o5 r
    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',' j' O' s0 n2 x6 `. ^
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back
& Q4 u5 ~8 g) G# M) u. X    '#submit' => array('contactus_confirm_form_back'),2 J& F- _" M& n  `1 C* ]
    '#executes_submit_callback' => TRUE,
8 a% c- Z; _- `9 c  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
: Y- |, e' i; H* X+ R( Z: [    '#attributes' =>array(
) g. L1 h3 u  q1 s' h$ u      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",. W2 h! s! |& H
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",  Q/ c3 I7 J# R, \
    ),/ i/ t/ |3 N6 f& U' l$ y( e4 f$ R
  );7 ~: t. R) S. b$ d9 M" v$ m

8 s( I- N2 [; {3 U" p# ~# ?/ N  //表单元素“提交”图片按钮" m- [  _& T5 o
  $form['image_submit'] = array(
( r1 o1 L2 B. h) C* O* p4 _: o0 |    '#type' => 'image_button',: X& e! Q8 ^5 ^6 B
    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',
- i: x0 A" R, V# w    '#executes_submit_callback' => TRUE,  I  d9 Q; d* T3 j
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit* X  P5 ~, |+ K
    '#submit' => array('contactus_confirm_form_submit'),
- I8 z; T2 j. a# S    '#attributes' =>array(
1 g0 X3 v, v4 n; q4 D- x      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",* T% Y6 o/ }( y
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
- L! E$ W* u# E4 a' {    ),
& a6 k- d/ Y0 Y1 j9 K  );! b( U9 y. g! T  `
  
& g4 q7 u1 w8 |" j1 N. g% s. S  return $form;
6 G4 v  e, R2 V8 l4 ?& s}/**
6 g! l% b1 a0 V * 返回按钮对应的提交函数
# W8 k4 E4 {0 B6 _& B8 N */' t8 X; y4 G3 Q, B( l5 q  r+ p
function contactus_confirm_form_back($form, &$form_state){) d. z3 J" e) Q: T
  //简单的重定向到contactus页面
; Y7 P( j* B9 i( C: a$ S/ l $form_state['redirect'] = 'contactus';
, \# Z4 o* y. N% {6 v}/**
# r: C0 }  g1 ^, [& f * 提交按钮对应的提交函数6 t# E# S* F" O6 q6 Z
*/6 M4 c- z$ f+ M4 W, y/ y& W: o; Q
function contactus_confirm_form_submit($form, &$form_state){
) F8 `( n1 O6 C- ` $values = NULL;; @/ L' g3 z1 _" J/ Q! w# U, c
//从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。; I" C! M( J5 C# B' X; b
if(empty($_SESSION['contactus_form'])){9 `$ E8 o  m) O9 k% E
  drupal_goto('contact');
: H% T* z+ f0 O  Q% t* A }else{) U2 }/ B8 X$ G. i! G- f
  $values = $_SESSION['contactus_form'];
3 R. A1 M6 [% Q- ^9 `  unset($_SESSION['contactus_form']);
3 c8 G! N7 J' R$ s }
# O. s) ?. k5 t2 V. U0 W9 G# [ 5 o2 _* e% O- n1 H. m; c. }; s
//收件人地址,这里为作者的邮箱
, O8 \" p! l, h $to = 'g089h515r806@gmail.com';
) U# ?9 @) R+ S8 } //用户填写的邮箱地址4 R3 d7 O1 R0 @0 s8 _; b. E, M
$from = $values['mail'];! b) r, w" D/ x; I6 u

. M  l9 ~' ^- U" Z //发送邮件
7 R* Z+ ~6 m8 Q; M  ^) z( E drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);+ h) l' |4 ]% s# R: D' C6 p; }
/ O% X- R$ E4 o8 R
//简单的重定向到致谢页面
8 q# q: ~& d  l, } $form_state['redirect'] = 'contactus/thanks';
6 v" q1 B) Q0 y/ q3 o3 |8 |}/**: C6 O# U# d) f
* “致谢”页面的回调函数5 }. i4 ?6 o3 b8 R4 j, W, v# Q
*/
  B0 ]# J) l2 V) p- jfunction contactus_thanks_page(){' [! Z- o" C$ p, o7 _
  //我们为这个页面设置标题
3 s8 F& r$ |: R# \ drupal_set_title('联系我们');. `# R0 W0 D0 Q+ q* C
$render_array = array(
. k$ r$ b6 o5 b/ N   '#markup' => '',
1 k" }) k8 S  s );9 g0 `, H; n8 T. Z0 A' j
//Drupal7的页面回调,返回的应该是一个数组
4 O  \. }. Y) h- X/ ]2 X8 H% l# h* P! |2 X $render_array['#markup'] .= '<div id="contactus-thanks">';
3 c$ w$ Y! L# z. u* P. e% j/ W $render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');/ X3 Q; _4 O+ \4 \3 y! H
$render_array['#markup'] .= '</div>';. t5 m3 p" c/ p
" o9 o2 N; P( y: G( p$ x: I
return $render_array;
! b  O7 H  N( |}. t  h) ?$ Z9 s8 D8 I

9 O& W+ a1 W) H1 m9 _1 X6 U( V. n/ o! [. }$ i

$ ?$ G) J0 D7 Q! x( _; e& y" k
% g9 @9 S2 V; d' c6 s0 P/ M* l4 B$ b7 i& o# \

2 P. D( L# h) X5 d" B9 ?
/ G! l* S, K! V/ I: t8 x6 E% s# R! f# M; }6 i, Y5 \" q
! k/ ?: y" ?3 p- l/ g! M4 V& A: n

3 v; t. X* c: Y! z( x" k; M2 [- q$ `7 b/ d: |0 ^0 a# v
- s. a& ^4 a6 B: R+ J; T

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

GMT+8, 12-13-2025 20:32 , Processed in 0.257631 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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