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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分! h# z1 _+ U* c! ]; ?
<?php
8 H# B) t& Z4 Y% d. M% m( }3 c* \/**' b1 y: o, E2 e3 @; ~3 p  c- |
* @file3 W3 d: M" b7 V/ c5 ]
* 方便用户联系我们.
, l* |, k; q4 F- e$ |/ U* I; J *// q8 G3 S; U* S# [2 G8 o0 q( G
/**
4 i* L/ B) X6 V * 实现钩子hook_menu().- Q% o' u3 j- c6 D* s
*/
: d9 U4 c, H/ p! k; l+ ]7 vfunction contactus_menu() {3 W0 [+ f3 C% k1 O
  $items = array();+ p: E; Z- _  u  d6 Y9 ^
//联系我们菜单项
9 i  G1 r9 i/ u. F3 J) h) v  $items['contactus'] = array(
7 o, v6 _9 I/ H/ V; _- O- y: {    'tilte' => '联系我们',
) ~8 R  }' c/ S      'page callback' => 'contactus_page',
3 X7 r- y1 i& `" R8 @* |) |      'type'     => MENU_CALLBACK,) {+ ~# G/ T" K0 w3 r
      'access callback' =>TRUE,
- M" _2 P& w* j+ d5 c0 I; W   'file' => 'contactus.pages.inc',
/ W9 H1 F. c* u. O6 O  );) F- V! Z' W- Z" p) V$ Q) M2 _! f
//确认页面菜单项/ `) m8 ?* Z* F
  $items['contactus/confirm'] = array(! F( l7 O, F& n- {: R
      'page callback' => 'contactus_confirm_page',8 J; e% G9 f0 {/ I
      'type'     => MENU_CALLBACK,
. C. M: S- \" D# Z. d: w& D      'access callback' =>TRUE,
; A$ b  l! Q$ _# _8 e  l+ S. a   'file' => 'contactus.pages.inc',
: {  R2 y+ i6 {/ P7 ^& h  );1 V% c3 r0 X1 I1 l& R  Z
//致谢页面菜单项
7 W6 ]! u) f3 \3 Q! P9 B/ U! e- ?  $items['contactus/thanks'] = array(; I+ q! I8 k7 Q8 \3 ^0 d  ~
      'page callback' => 'contactus_thanks_page',) A/ N: b7 u) e5 {
      'type'     => MENU_CALLBACK,! s5 P3 m, Q$ r( r( j- i
      'access callback' =>TRUE,
& Y7 D# D% `4 Y( h9 F0 S$ J   'file' => 'contactus.pages.inc',9 A  m" X& N% N. O' Z/ ~4 M
  );
1 w6 u9 q  u2 U# o9 H- a; t& z$ C; G) r. O  return $items;
7 c: q0 @7 z4 n( S' `  Q}
7 c% W) D0 l8 @! x* k/**
0 B, ~/ G5 S$ |% q5 E0 s * 实现钩子hook_mail().
$ e. w8 W- F  a" T( O */6 w# [: j: S) o6 e1 N' p$ c0 f
function contactus_mail($key, &$message, $params){
# N5 r1 w; @8 I* _8 Y $language = $message['language'];; d, c! [$ o8 c, B; Q' X$ L
  switch ($key) {% v7 M8 x: A4 O0 k
   case 'contact':# E& C; a3 m' A% z: s
  
* o' z3 w2 U* w7 `  s4 I% M: }: q( u, k0 P    //邮件的标题
1 i9 W6 f+ h6 X9 }/ ]& v    $message['subject'] = '联系我们';0 O2 t8 B8 x" _" @3 j  a, M
Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
" B% {- h( |5 u  * @2 `" n& w4 V% t
   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源8 z5 w# g" u. f6 `- c
      $message['body'][] = '姓名:'.$params['name'];7 ?! d0 X1 i/ l, Z' r7 J& \
      $message['body'][] = '单位名称:'.$params['company_name'];; ^  L5 |# R2 l0 t
      $message['body'][] = '电子邮件:'.$params['mail'];6 o9 y9 L9 c9 ]9 d' y: Z5 ?+ e, k
      $message['body'][] = '电话号码:'.$params['phone'];
% `3 p' O$ J1 C! w      $message['body'][] = '邮件正文:'.$params['contact'];
& w" P1 d2 f% r% M8 x3 A) u. p0 `   
6 F# s2 }! w2 r8 ^      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']
* ?: I/ g* @* Z7 V5 Z      $visit = "";1 \4 n5 k8 V" h( x* T& J& D
      if($params['visit'] == 'other'){5 m& C' I' g# ]7 z5 f$ i7 ]
        $visit = $params['other'];, [0 F6 M, }* a# k4 A  o
      }else{5 _; J6 r0 l: E% z% d9 E$ e
        $visit = $params['visit'];/ l% m- g" y( U
      }4 t. X, b1 ^+ Y+ I+ [
      $message['body'][] = '访问来源:'. $visit;
( k# F( p  c0 z3 z  }
  F# N$ B5 V$ u4 z% H}, v1 w8 s- s) w; l& E

9 c5 K8 W! A0 t% l$ o8 T7 D$ U/ A& q
" p% I  |+ _% g8 K: i7 T
) ?+ K: v& P  ^4 ?
2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调4 E/ q0 |/ Z: G: v4 J6 V- M
<?php/*** n, ?: N  _# m0 m* `
* @file
' r# ]9 ~% D* g2 P * 各种页面的回调函数.
4 J: a3 @2 S' L7 n. Z2 O" U */
& X5 q. w# a# v  g. p: m8 H, K # P4 ]' \1 j/ P/ U* K
/**
3 m. k$ k" V) Q6 p% ~& \! ? * “联系我们”页面的回调函数7 r) g  ~+ u/ Z' a
*/! v& H8 w/ Q) P5 f; ~& I) T
function contactus_page(){
. ?) @7 L2 A3 O- k: e# H  //我们为这个页面设置标题
9 b% }& \3 W: X0 p' y drupal_set_title('联系我们');
1 H+ y0 V4 c. r1 C
) T6 n' ~* m$ f4 ^* G $render_array = array(* T8 m% J/ |- q& [
   '#markup' => '', 5 T% R- D$ }/ i0 q$ z& L
);. O: u) z/ E* v5 o0 N* h: ]

* U$ ^1 J  ^4 k //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
0 d# V. g4 z! e $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));
3 Y( Y- ^! k5 {3 v1 i5 `& @
" s6 k3 N9 Y* x5 D" o4 ]) W //Drupal7的页面回调,返回的应该是一个数组
0 J' [) H, K* O+ K' L) G3 U return $render_array;
7 r' A, d1 r  {' L0 ]}/**5 o# q3 {! b! L
* “联系我们”表单的构建函数
# |- o, _% m% A/ S  ?  K */# O" ^4 i+ V) ]& k0 X
function contactus_form(){& ]6 o' J7 Y- X* V  W' b7 K6 G
  //添加我们自己的CSS,用来控制表单的样式* V+ p9 N, R0 ]. p2 l
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
0 j3 o6 c) m3 k2 m' h6 J! @) M
5 m# N6 _7 o8 H& P. Y. r  //提示信息,默认为markup类型。9 y% a( F) G5 \0 o
$form['tips'] = array(
0 M- T! r+ c9 r/ T9 M* q7 g  '#prefix' =>'<div id="tips">',
( k; V" A  Z7 L, y2 l# `  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),
: _& M2 |2 A" }6 @  '#suffix' =>'</div>',, j6 {4 {- }$ n) _
);0 J, Q( r3 c8 r

8 N) M/ d9 a4 P8 q; ^, e1 E- c //表单元素“姓名”3 z) W; G0 h( u' A/ v3 T
$form['name'] = array(
! m9 e9 i0 I; I$ s6 v   //表单元素的#title属性,对应于实际输出中的label* [7 L5 S1 ~$ g2 h$ ~
  '#title' => t('姓名'),
& T& r! |8 R( u  //表单元素的类型,这里为textfield/ r2 C* U# ^. u
  '#type' => 'textfield',
2 e8 K+ `! d0 ^  }$ n5 Q. s  //这个表单元素是必填的3 h0 R7 G9 }! D; T6 v; e
  '#required' => TRUE,& I" L# v; O% _5 e
  //表单元素的默认值,这里使用了三位运算符和isset进行判定
( g* E3 }- |# n- H; M) U  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
6 ~% P0 b9 q; W. Q! {" v5 k  //表单元素的描述,! C/ x7 w5 z" Z- F4 ]
  '#description' => t('例如:周星驰'),5 x$ k4 E  X4 Y% h5 m3 a% M( }  w
);
: J1 E% ?) s1 `; f4 M( c; M 4 u6 h" a' V9 _) ^- s6 C4 l
  //表单元素“单位名称”8 H) W/ N; w+ F0 b
$form['company_name'] = array(5 t7 _) n( x* I% @0 t% a9 W
  '#title' => t('单位名称'),: U7 _: Q8 z  A8 s
  '#type' => 'textfield',
( A8 t; |! r! d  '#required' => TRUE,% o9 S) ?1 P& i; `% B. w0 y) h
  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
$ S1 I6 C+ y2 f5 L; w8 h9 E  '#description' => t('例如:北京无名信息技术公司'),
+ G# }8 v2 T; l. W" u- r );
0 B+ w  q5 @8 x/ b( s
" i! v) u5 F+ |" d. _2 ?  //表单元素“电子邮件”
3 j: F  P* z7 K $form['mail'] = array(
+ U4 M5 p" J5 C/ m  '#title' => t('电子邮件'),2 i: X- h( K, H
  '#type' => 'textfield',
; w4 V# j! Q3 q5 T6 H9 s. I  '#required' => TRUE,
& S6 B' z1 \) {1 v+ v  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
" O9 U  ~# V) S+ x' z4 P  '#description' => t('例如:info@example.com'),0 a' U. a% f. |$ l/ Y
);
, ?/ D" r+ F1 V! c4 S1 D/ X) d
! f: q1 f( [; D6 k1 B7 K //表单元素“电话号码”. K' e5 {# T; v9 l! s' K. V
$form['phone'] = array(1 W0 e/ `3 z) f
  '#title' => t('电话号码')," R8 ^1 h3 T9 ~6 `
  '#type' => 'textfield',
4 X$ Y& p4 q3 V" d$ G. H  '#required' => TRUE,
% x. J' {8 z/ b7 l  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",4 H- \: S/ _* J: d8 W  _
  '#description' => t('例如:010-88888888'),- `9 h: C+ c' G' j! c, z4 H
);0 F% P5 e. N  Q. s8 c

- @$ ]: l* J" k) {: B0 w  //表单元素“邮件正文”
& c- S3 c) y- M$ r7 A, b $form['contact'] = array(
. I; e; L5 o* M' [& n) T* P  '#title' => t('邮件正文'),
. U1 q+ N0 D. M  //表单元素的类型,这里为textarea. b9 {3 T) o: J
  '#type' => 'textarea',
! Z, H' `* N4 _6 \* B+ D  U  '#required' => TRUE,+ R& _, X0 _+ W# [
  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
0 Q5 E) B7 c- X# I% \& ?5 W* | );
" X1 [2 n% S9 `( W  d
$ |5 I2 z9 s& g8 [$ y0 E //访问来源的可选项2 C: l7 ^8 v+ D$ E4 C* N9 K
$visit_options = array(
# W) G- E" h" c4 P; |  'baidu' =>t('百度'),
2 V' i0 {1 `. T  'google' =>t('谷歌'),
+ l% }7 u: z/ [  'sohu' =>t('搜狐'),4 P) I2 [  s- B& ~) f
  'other' =>t('其它'),3 \, g, P( Q  T! a6 |
);6 Y( u' O6 t4 X8 w( _
//表单元素“访问来源”
0 c1 T6 d0 ?: S; J' z8 J $form['visit'] = array(+ C0 H6 a0 H6 i0 t$ d8 ]) b
  '#title' => t('访问来源'),, A9 U8 h7 V9 R
  //表单元素的类型,这里为radios
! a, v7 f% `0 i5 d  m, \  '#type' => 'radios',6 ]$ J# q. ~3 g0 ~* i
  //单选按钮的可选项。" h; m6 ]2 J7 O2 U9 l  t
  '#options' => $visit_options,
. U/ v, p4 z4 Z  S) _: ?& f" x  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
5 c% f, f8 e& A; t# t8 p  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div$ s. P/ O1 N* j! s# I
  '#prefix' => '<div id="visit-radios">',
" z+ o1 D! `) L' E  '#suffix' => '</div>',) G5 ~& s- U& E0 N
);0 T0 D; n5 \9 f1 n

% L& w; a- N( s4 n  p% b+ m //表单元素“其它”,它依赖于表单元素“访问来源”
1 E; t) c$ v' l: O4 b $form['other'] = array(
2 X8 W% d' W6 C% m+ t  '#title' => t('其它'),2 [  R2 Y# T6 H3 z. \
  '#type' => 'textfield',8 U( E" e; |2 \8 |. P
  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",
* n8 R1 g6 w7 C% a- R! I+ C  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来8 t: M  E8 ?! k1 }1 q
   '#states' => array(
1 P! y5 N6 c& u( G2 p4 r    'visible' => array(
* C, u% |# h- W' `9 m     ':input[name="visit"]' => array('value' => 'other'),
5 s! C$ [7 }) A5 h   ),, f- D* n0 `' A5 M* F
  ),2 u( I1 x" v3 h
);
9 c% W" s' S6 |2 N- _2 C /*; v  a7 ]1 ?0 M
//表单元素“确认”提交按钮
1 V1 ~1 U8 \  n! t4 C  $form['submit'] = array(2 v; }4 m7 }  `2 U8 i0 e8 A: Z) k
    '#type' => 'submit',
! L0 Q5 v& U! l) b2 b    '#value' => t('确认'),
# Q* Y  }$ [; e: W# V4 k3 Q5 {  );( O# J) ]) J7 r! m8 i9 W( j/ k( v, s: W
  */
, f0 h; G) q$ q, h0 I
) x5 g' }6 M" m+ Q  //表单元素“确认”提交按钮,这里采用了图片的形式4 w) S9 \  z: I% y9 \9 G; g7 N
  $form['image_submit'] = array(
" }- O6 D$ |  w5 A% r0 G' @   //表单元素的类型,这里为image_button
! x, V# ?  h1 N( j! x3 f    '#type' => 'image_button',
: O7 u" [' i  m  
/ v0 o% ~/ E  v! X; W. \6 a  //图片按钮特有的#src属性,
  L6 E" M' |8 K( y9 Z; b7 ?# {    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',
3 c$ q) L. }* t. W$ K    '#value' => 'image_sub',
1 {' h. p; e  I. N  : ^/ T3 u! v' }
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果( I9 q/ ]' i% N! q4 V: I
    '#attributes' =>array(, D5 g5 S0 A) _8 n( L
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",
% x) [: b; R. g1 j. |      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",0 a1 O4 f: u/ n0 A# {  L: |
    ),+ z. \+ N% @4 c5 ^. b
  
' a. M, {0 f5 r0 ^! N4 P- C( ]/ k  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
4 P* @- D& H* ~. L* C    '#prefix' => '<div id="image-submit">',3 Q5 Q. T! i' W4 G: i
    '#suffix' => '</div>',
3 m8 t' ?3 K0 F4 T( a  );  return $form;& y6 t! M; O' g& g
}/**
# z$ B* y! G" x. j, l2 b * contactus_form表单的验证函数( X  F. l' U7 K& r
*/0 N+ b9 `. s6 _6 }* h  u; n
function contactus_form_validate($form, &$form_state){7 a) e/ S5 y% ~& n# ^) I" W
  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。7 s  s) J& u5 m5 Y) J, g, c+ m
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){
9 X, Z3 p8 [8 x: z  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));- Q7 J/ K( d) ~
}8 P! H2 K+ F/ n) D4 ]
}/**- v: W' @8 p2 j) t
* contactus_form表单的提交函数
8 @1 m) m) F7 }+ F, T */
; \% k6 q3 v& Y& ofunction contactus_form_submit($form, &$form_state){
8 a3 r8 n; k- u& D  V. I  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。9 p  q$ Q  ]" B- N4 q& \7 @: ]% r
$_SESSION['contactus_form'] = $form_state['values'];, Y  x+ T5 u( o7 S1 H; h9 T; X
//表单重定向到确认页面
5 y  W( o" t2 ^) @; p" q- E $form_state['redirect'] = 'contactus/confirm';4 l/ B. {1 A" Q7 J; w

" J: M& _7 e0 [4 K6 k, o9 L0 C0 f/ m. H3 M$ U
$ V! O7 o2 L1 v7 x: P* a4 R8 o  l3 k
3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**2 R! ^$ j# @: P, k8 k
* “确认”页面的回调函数
) X' m$ L; c7 E! t( I */
( H- N9 O! X+ [8 U" b5 O6 @; ifunction contactus_confirm_page(){% n- h$ i+ u. }, _
  //我们为这个页面设置标题* P, Z+ q$ j8 `/ O& B
drupal_set_title('联系我们');) }+ m* P# u! F" f

. p) I9 e3 g' K //这里首先作了判断,如果会话中没有设置contactus_form,返回contactus
* k2 u1 z( Q& a& D+ | if(empty($_SESSION['contactus_form'])){
9 R' c- |0 e2 O) X3 c& t. Z  p# p  drupal_goto('contactus');2 H6 Y8 i3 S. }, v
}else{
& g: ~* U( E8 Z8 \) _/ w2 J2 @ } $render_array = array(
% W  B; c6 E+ L4 R2 J3 Q% X/ J2 N   '#markup' => '',
) t1 P* L/ [9 p7 T );
" g% K( _0 o9 h7 I2 d //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。2 G! c$ c  L4 r* x, |+ y, V
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));' w' H1 y$ u% f
//Drupal7的页面回调,返回的应该是一个数组; y) T3 C6 l0 k1 u
return $render_array;
2 U* @: w! e: l) b+ X}/**
3 g2 I) I3 k( U) Q# X9 s+ t * “确认”表单的构建函数
) h: g( S. B* o */' m5 D: A3 @% A; y4 `5 b% G
function contactus_confirm_form(){
5 `- D2 O+ f) `, N( ?0 X9 X  //添加我们自己的CSS,用来控制表单的样式3 X3 B+ j: y' z( g  G
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
& _. j. R; @" H. s- }7 m //drupal_set_message(print_r($_SESSION['contactus_form']));
" }' a, _, s9 i! N# j3 w+ R //表单元素“姓名”
# ~" [. f, D+ U& m, C% y $form['name'] = array(
0 ^3 Q& o1 ?# c3 f% R  '#title' => t('姓名'),
. A) F: u0 f% V6 u  w5 j  //表单元素的类型,这里为item
+ X$ p  i8 ^* N  K1 h  '#type' => 'item',! |  d$ d, N2 _3 J: h) m
  //'#default_value' => $_SESSION['contactus_form']['name'],% j  E, Y2 k5 W+ d3 ^' Y2 M% i
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,8 z& M+ m) `) u0 I" ?
  //最后改为#markup,才可以了
9 N8 e( h& ^5 X  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
0 E/ K/ t4 g  O3 N8 `* s9 ?7 d );
) Z4 W# I# D  [/ I( T. i4 _1 }! z8 A
) z6 _/ G) F  K  //表单元素“单位名称”
3 Y: ]) S1 f  {: D* E# f $form['company_name'] = array(
  h+ H/ Z! O2 L# `  b  '#title' => t('单位名称'),
; f4 v; ?6 [  }$ ~/ [  '#type' => 'item',) l) A9 O) t% v. L
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。
( \  `0 T* p( S- G9 u' x2 S, \  //'#value' => $_SESSION['contactus_form']['company_name'],
) i3 m, m; Q; K! N  U; z  R8 e) |  //'#value' => '123456',
1 t+ y% P4 ^* d& _. Z0 z( A  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",# B. p3 r+ m6 W* s$ B% B0 O4 ?
  //'#description' => '123456'," K8 s: S3 A( T1 S7 U! \" m
);& I: ]/ y4 r0 g
) C1 @4 K. T4 R" b2 F
//表单元素“电子邮件”
9 f* b% J' J8 S. A $form['mail'] = array(
8 ^" m5 m) Q0 {" y  '#title' => t('电子邮件'),& e  P" ]7 L& a2 L  V- B
  '#type' => 'item',
9 g& M- R% x7 T- e8 T' F  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",$ j$ x7 n& @$ U% X
);1 e  I; c) b9 N, j2 r! `

, |' A# m7 Z2 G( B2 l* U/ `, A //表单元素“电话号码”
3 C9 Y, J: k4 d. {% h; C) Z $form['phone'] = array(
$ Q* t+ w2 q, |$ k- q! f  '#title' => t('电话号码'),
) l4 f0 F7 U- K5 I: q1 f1 G  '#type' => 'item',
' K! T8 x& o8 ~5 l' j  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",% V/ |, `" S7 U1 @# P& f6 q- J5 i3 b
);! \- j' m* o* h# a7 B
# `) k2 M4 ?  a2 j5 P2 x
  //表单元素“邮件正文”
5 }) `; }/ w& d) V $form['contact'] = array(9 Z) w8 S8 W6 |' o7 R; v- I
  '#title' => t('邮件正文'),
; ?, D3 `2 ^- w3 g4 ^4 C0 p: y7 D  '#type' => 'item',. L" ]  ?3 k& _6 r& e8 o
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
. j: D. x$ c- t6 [% f. g2 {4 A );
' J2 K1 S0 ]3 p1 N
- ]1 M4 P% _+ f0 H' d" S1 n2 r //表单元素“访问来源”
! Z( a2 D' r8 ?* |2 P7 C $form['visit'] = array(2 Y4 A+ o. f: Y$ k
  '#title' => t('访问来源'),# W( r# U- b' y# v$ F
  '#type' => 'item',2 A) c1 t. {+ o8 I6 F# C* n
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
, B' a! O/ ~6 r );% U0 c  A2 A  T* f% _4 C

% \8 p; S2 z& N: w" T) b2 r //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。3 J0 G9 u( @% u3 p4 y
if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){2 h- |/ m% E2 l& Y% O# g+ K7 a  H
  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";( c4 ?) [1 x3 r/ F, E3 {
} 0 N; s( ^$ o5 u7 j! m  D
/*
8 ^2 X+ E! v7 a- p# [$ |7 H3 T! |; E //表单元素“返回”按钮  J8 f' j) G+ a9 ^6 W* c7 C) r# L
  $form['back'] = array($ c8 N5 S- P/ _! ^/ Y0 a
    '#type' => 'submit',
: F. \& r9 s, _% h: p8 O9 b    '#value' => t('返回'),
+ j8 O5 C4 A- O' y    '#submit' => array('contactus_confirm_form_back'),1 K8 z. {& I0 d+ D+ ^. c3 \. y0 K
  );. I6 G& n! e3 a
//表单元素“提交”按钮
2 X4 ~; T3 ~2 H+ U  $form['submit'] = array(
9 s3 S, s) `! c' v4 Z% t+ d    '#type' => 'submit',9 O" m1 [: L2 D8 p* M( A
    '#value' => t('提交'),
; n* \/ @( u& W8 z) I  );
) Y4 n6 u8 P; ~! F  */
/ }$ S; R4 e. l 9 i4 ^8 o) a- [
  //表单元素“返回”图片按钮
& |% O0 p4 ^/ U  N  $form['image_back'] = array(% S# {+ O# I- S- G  B- A
    '#type' => 'image_button',. _2 b2 H" T0 R! q" d! \; j
    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',
6 p" T  k& F& }( Y: z' D3 i* x, Y/ I  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back7 B7 o7 x. S+ I5 H% t' ^
    '#submit' => array('contactus_confirm_form_back'),- j5 _3 F% _3 F8 v# M% F
    '#executes_submit_callback' => TRUE,. K/ e# f" I3 j) S( c- g
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
- w( O( L2 F' @" N. i1 ?    '#attributes' =>array(
: T; G2 ~! l5 o! z* ~      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",
' m1 N- s1 ~& a+ j! Z      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",* [/ q; B: v5 l1 R
    ),* S0 S4 A$ l" z# t$ C6 S
  );
  ~. A8 p2 b/ a ' r$ i* M2 @" S* k; `9 a- v" b. y/ f
  //表单元素“提交”图片按钮
# q6 B& g) O3 N& ^: D; K) ?  $form['image_submit'] = array(
, K0 m1 R' Q0 a1 |) q& I6 \    '#type' => 'image_button',
$ R& ]. `9 E7 i& w0 V& F' j    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',
! u" |- v2 l& n/ T; D( u    '#executes_submit_callback' => TRUE,; e! s( |6 m8 M: d- k* Y* C
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit
. I  \/ N* |( c- x    '#submit' => array('contactus_confirm_form_submit'),7 c+ O! g3 u7 {+ }% g& j! }
    '#attributes' =>array(" |0 K) @* s4 H( b2 k' e
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",- {  O" q7 Y2 d# L6 d: k' ?
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
; B; D4 e& H# s7 F0 \    ),
* Y; F; r& j* D5 \, h  );
. J, S9 I. T4 |) Y  }  " \1 y) j6 `& M2 I& c; Z/ P; {
  return $form;
+ B( X( _% P0 I8 |}/**: m6 x7 U. x" D4 j: X
* 返回按钮对应的提交函数. `% d3 @/ g4 u: v3 O* p; q9 G
*/2 B& R4 K* d: m1 ~
function contactus_confirm_form_back($form, &$form_state){/ q4 k$ F. Y8 E: W/ p$ L0 i
  //简单的重定向到contactus页面
) `- z+ ~$ L, a $form_state['redirect'] = 'contactus';! @& s- D- l- {! M) e) R' h
}/**
6 C% U: x0 u8 O2 O! [ * 提交按钮对应的提交函数. ?9 f& c! k3 t& C+ r
*/) S5 m# X0 d: y* p1 S, S6 X8 ~5 k5 i
function contactus_confirm_form_submit($form, &$form_state){
/ E3 [0 z8 r$ l7 b+ i $values = NULL;+ f, V7 ]; h4 x2 m
//从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。
& \+ z( I* \4 _7 h, T) M7 { if(empty($_SESSION['contactus_form'])){
5 x/ F6 n3 \6 M) v! V  drupal_goto('contact');" T* Z. c9 `$ f. b% q
}else{2 ~0 I6 B' @0 V5 {
  $values = $_SESSION['contactus_form'];
: c1 k7 m4 ~) i. [0 h0 P9 o* x6 K  unset($_SESSION['contactus_form']);* u% @6 E5 v( @0 _4 V- z: x
}: e4 }7 M* F6 i% P  c
/ P: y+ ]+ e0 F0 p; R2 F9 h
//收件人地址,这里为作者的邮箱) }# h! C. P& h5 [7 w
$to = 'g089h515r806@gmail.com';% ^8 ^+ X% E- z% R4 X1 L1 G' t
//用户填写的邮箱地址7 Q8 i  ~3 f; G/ F# @' J/ v! f# V% [: h
$from = $values['mail'];% k& J1 z, o5 i5 A  a& {7 h/ X7 ]
3 R7 y) \8 D  k9 {& H3 ~8 u
//发送邮件  b+ O5 A% D6 N7 D& Y- C
drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);5 S$ y, j# r% I7 S+ |
% {( e/ N0 {+ ~6 v
//简单的重定向到致谢页面
2 }: V- I7 `, Q  T4 ~  F( V/ R $form_state['redirect'] = 'contactus/thanks';' y3 O+ V( ?: F0 i9 a& j! ]
}/**
3 u( Z: B6 u2 k& T; r * “致谢”页面的回调函数1 Q, x! x. U9 n3 k
*/
. m5 q( z$ `. Y4 a2 w) Yfunction contactus_thanks_page(){
& T/ H' w7 @  p7 p$ ?3 f  L9 I  h4 ]  //我们为这个页面设置标题
& G9 ?. u) h$ g$ `7 o1 j' }* a: ] drupal_set_title('联系我们');
5 F" q+ m" z6 N $render_array = array(& v# @7 _* f" L+ T
   '#markup' => '',
  X: r- O8 A6 U0 Z/ W/ w. Y' ? );+ B; C# A6 G8 L" B
//Drupal7的页面回调,返回的应该是一个数组4 @* M! @2 N3 G( z1 ^2 i3 c
$render_array['#markup'] .= '<div id="contactus-thanks">';
' z% g& b/ G  t; I8 F8 q* M $render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
1 l# \6 ^" u& Z9 F2 v $render_array['#markup'] .= '</div>';
; |2 p0 {4 M) W7 Z& z ' n) l1 v; Y2 @+ @
return $render_array;
1 m7 W1 R  t5 c( K* w( V9 F}) R& {; p! `, t8 c) p5 c; q
5 ?& _- Y3 o5 v- `' f; a1 _9 d

: b5 O1 D- C! c
3 f0 n8 {8 I8 x/ s+ g" d/ M
8 o4 e, W$ c" b& w0 X; Y$ L. |- A( _. Y8 p$ o* c' g2 u, S3 }
3 J0 [/ r. A7 Y- B  j) r' l

2 c& j3 D+ G9 W; B9 o
* W; l( n  b  L5 r3 w
# a; J: ~2 m6 V6 L  ?$ C) s( i! [- L9 w% G

; |% F: v6 ?7 a* V5 Y' N* g
& H! X8 x3 p, Q5 [

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

GMT+8, 5-1-2025 09:38 , Processed in 0.915244 second(s), 183 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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