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

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

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

[复制链接]
发表于 10-13-2011 02:27 | 显示全部楼层 |阅读模式
1.Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分. ~" Q% M: H% t, @/ Z" A
<?php
3 K/ r1 J5 X: R. N/ i/**
' v" v- L% o& o. m: E * @file1 o/ M) E, |$ R2 {# c. ^3 f
* 方便用户联系我们.
7 A1 c5 X: p3 G) \$ d. D8 G */
3 z2 L( f' i+ x- ~+ `4 A; N( \/**
' O( G# y  o" S! | * 实现钩子hook_menu().) y2 U" H& c5 R
*/
" V' ~" v3 O! s1 k0 xfunction contactus_menu() {
. V* y7 ^2 h( c: f6 h  F8 N  $items = array();$ l* m5 d& N( v; [# N
//联系我们菜单项
0 D3 P/ A- ~+ ~: ^6 `  $items['contactus'] = array(
) u6 i1 o. R/ {" [: v5 F% _) T5 O7 a    'tilte' => '联系我们',
; _# }; a" w$ Q      'page callback' => 'contactus_page',
& t% q" V5 q: `  p      'type'     => MENU_CALLBACK,
7 \, g5 M0 m$ R+ x      'access callback' =>TRUE,( R7 M. ^( W, z  u# j. V
   'file' => 'contactus.pages.inc',5 T4 t: b( F8 R3 E
  );# s7 \" b6 @0 N# |
//确认页面菜单项
' x- M- u( g" Y, g1 n, [- t! c  $items['contactus/confirm'] = array(
- B/ v0 X9 u" a- W% B: K! R: Q! u      'page callback' => 'contactus_confirm_page',
1 i) ?* Q7 L% H5 |9 h% y* H      'type'     => MENU_CALLBACK,
8 N. |$ H  M7 C      'access callback' =>TRUE,
, o! O( S: W" w- r   'file' => 'contactus.pages.inc',
& G, m4 k# L: s+ T  );& X0 \) e: @" o1 R
//致谢页面菜单项' G" F& k' @- o- u( k; F& \3 O
  $items['contactus/thanks'] = array(- W7 I# O6 C0 O$ ~9 k0 I
      'page callback' => 'contactus_thanks_page',
# ]' K; _3 y, t7 w& }  Y* L      'type'     => MENU_CALLBACK,
: U- h" p) q( O/ X; ^) l5 ?7 T      'access callback' =>TRUE,
' l6 E0 m3 ?  q6 q   'file' => 'contactus.pages.inc',, P9 H+ c0 W3 ?# _3 a( e$ ~. l' @, a1 ~
  );
' h6 y! `9 K/ a) E$ z  return $items;# _. P) n$ C+ E! O6 C7 X
}
, x" Y  i+ t* _) ?5 d* E2 O: L0 o/**
- e( E- N( t, U! ?. n * 实现钩子hook_mail().
! N- O  k; u3 V% W */) G0 N" D) I3 Z9 l0 n
function contactus_mail($key, &$message, $params){
( V+ [0 [. I9 J) F $language = $message['language'];* f+ N3 k8 b; D- y
  switch ($key) {, t1 a: ]* z+ `  K
   case 'contact':) }# P4 Z, l  F5 J: P- R# t7 ~% s
  
9 F1 d* f: X* q4 P* W% }; [! V4 ^7 d    //邮件的标题/ a( O. T* I' s, c% B; a2 R
    $message['subject'] = '联系我们';( C* ~- j/ h. q6 W) g$ ^
Drupal 7 中文教程 联系我们 两步表单 module 文件 代码部分
. c" P3 j* K" q1 @0 \; v  \7 e  ! m( a' |8 H1 Q' T( s" c
   //邮件正文,这里面包含:姓名、单位名称、电子邮件、电话号码、邮件正文、访问来源
* U4 p- _* E* Q7 g# M      $message['body'][] = '姓名:'.$params['name'];  t: x! w9 X/ Q& B0 c
      $message['body'][] = '单位名称:'.$params['company_name'];7 ^5 @! c  D5 B5 o1 R: U8 `4 W! u
      $message['body'][] = '电子邮件:'.$params['mail'];
9 g' l2 S) O+ D0 a: |. K, L6 B      $message['body'][] = '电话号码:'.$params['phone'];
! w8 y& M$ D% k9 \# x. [0 h) m) l      $message['body'][] = '邮件正文:'.$params['contact'];( c& Y) U2 _" E+ C
   0 O, p# e1 X) j' ?2 n. U
      //对于访问来源,如果visit的值我们选择了“其它”,那么此时我们取$params['other'],否则取$params['visit']
) S. [4 k5 Y0 J, D+ M" E      $visit = "";
# x' I& t. z# K( a      if($params['visit'] == 'other'){
2 x. F% C: \  F) d& T0 D        $visit = $params['other'];. e6 u, `1 x0 ]! b) F$ J
      }else{
/ J+ v- O. r7 }$ Z        $visit = $params['visit'];/ ~- [1 U3 @; U
      }
5 M1 o! U" _7 v& x# z      $message['body'][] = '访问来源:'. $visit;
0 z+ w( g" i. ?/ N  h  }, {  F* W  ]$ k8 z: q% s
}5 p' [. @# I  ~0 K1 O- j
1 H( _, @/ g2 {" H% ]3 M% O; J! m
# `; j( y& u. p6 y0 n
& |: Q7 s" `7 ?; Q8 y
; s3 T  J, M) Z3 t
2.Drupal 7 中文教程 联系我们 两步表单 “联系我们”页面回调
+ {! S9 S- Q$ v% k& f6 y<?php/**
3 ?5 h  t; f) K0 [- i2 B& t/ P * @file
: n# Z, V2 K  F1 P * 各种页面的回调函数.- N, h, l+ C! I7 C) J" F# c6 a
*/5 Y/ ^. i# W2 V, K% O0 o
' D, M$ U+ B! t$ g5 }& g: I8 N2 s
/**
2 l; I2 a: k; D; ^+ j- ^* J& b% M * “联系我们”页面的回调函数
2 R& E6 [( U5 t- L/ g- t */
* Y1 C# d* H) `8 xfunction contactus_page(){5 A; j$ ^& u& \" n
  //我们为这个页面设置标题
8 @6 U$ t- U5 R$ x& x8 R# p4 A9 } drupal_set_title('联系我们');& q, [" e+ m/ V% D/ Q+ Q

) I- w6 g7 L9 y  F" o $render_array = array(1 x9 Z$ R& g3 l9 s4 l/ M3 @+ c
   '#markup' => '',
! ?- F( q& o6 \: @' J: r );& M( Q; z, b  s2 q. R7 X

7 m( _! Y. J$ J; L5 s9 c //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
1 b) Z! o( f7 u5 r  K $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_form'));
" K( P$ l# }7 Q! I* ?- R! l
* J% i% A: G6 T/ _9 N9 O' S //Drupal7的页面回调,返回的应该是一个数组5 {* D4 ]( M6 e0 {7 s
return $render_array;
- D8 V; N) r, n}/**
5 ^1 z0 F% X1 [$ O/ B( V * “联系我们”表单的构建函数- X7 @* b- Y/ G, M9 Y9 W$ U
*/7 P: S4 I  j8 F  |, }
function contactus_form(){& c2 {* K+ K* L) d
  //添加我们自己的CSS,用来控制表单的样式. `9 Q" l& @4 ]$ X! \4 _- `' |
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
/ N! @0 K& j) A6 k
% _8 y  ~# N0 n7 Y8 W! p  //提示信息,默认为markup类型。
$ x+ |' G/ G2 T$ b $form['tips'] = array(
, U$ f( h$ ~* V/ I  '#prefix' =>'<div id="tips">',
9 {1 p, t1 A/ w' @6 @9 n, r' l( y! I  '#markup' => t('<span class="form-required">*</span> 号为必填项。'),+ N& ]+ y: y4 x" z8 m+ Z+ M
  '#suffix' =>'</div>',
: b' @0 _1 ~  c" i  f& g8 H );" R$ z; z# i0 h
( V4 V; @7 r4 I8 t6 g' M/ ~, d
//表单元素“姓名”
- |* F  s0 k' d5 l( X $form['name'] = array(
' v9 Y+ B, R( H0 [   //表单元素的#title属性,对应于实际输出中的label
* g; i, f! A0 a6 _4 j  '#title' => t('姓名'),2 x& d) j% h1 W
  //表单元素的类型,这里为textfield
2 _7 A# t1 L: R  '#type' => 'textfield',8 Y$ \% }! E1 t
  //这个表单元素是必填的+ v& T7 ~6 f8 f9 m( S# q. N8 H. ?
  '#required' => TRUE,
7 B/ c2 h. N; \9 W  //表单元素的默认值,这里使用了三位运算符和isset进行判定
; K* I' ~( ^% b* ]) d/ q, y  '#default_value' =>isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
) H9 |3 h; L: q/ P. M8 e, q' {% r  //表单元素的描述,( l6 V* @8 @. E! N& H+ L
  '#description' => t('例如:周星驰'),. t! S# l0 \9 }7 y% s5 g5 _& I) J% ]
);+ A5 N3 j! B* d& L3 {. x, |8 o; V
& y2 c" y  }! t' l
  //表单元素“单位名称”- p- M9 N4 g( _0 H
$form['company_name'] = array(/ ]) i3 A9 a- o) a' Q$ {" @
  '#title' => t('单位名称'),
- ?2 }+ i# p# `% W  '#type' => 'textfield',6 L, E. a1 Y) V
  '#required' => TRUE,
2 m" A5 C3 X0 W3 |  '#default_value' =>isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
  c  K- _( O9 P5 s  '#description' => t('例如:北京无名信息技术公司'),
. ~9 M$ h9 W/ }0 E& D- m; ~+ k5 ] );( \! ~, g1 l! [+ y2 S
3 T9 [- }5 |( d$ m
  //表单元素“电子邮件”6 F" T5 R( Y3 x6 q$ ]1 G
$form['mail'] = array(
! S' X1 Q+ a7 |  {1 {( r# `  @  '#title' => t('电子邮件'),
6 N+ A; F( E: C& ]+ ]  '#type' => 'textfield',
( @; h8 ^4 l6 Q$ M( Q2 C  '#required' => TRUE,* a; g6 r, }7 r9 k9 u3 z& H* X
  '#default_value' =>isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
: ~8 ]8 w0 \1 i& Q% L% Q$ r% l  '#description' => t('例如:info@example.com')," Y- C" S2 b' z2 m
);% T( c% O4 p7 Y1 ]

' P8 C! C# o1 F' }% q9 l4 y //表单元素“电话号码”
* \1 M: j* t" D; ?8 f4 M: C$ z $form['phone'] = array(# e1 g$ \# T. c" C
  '#title' => t('电话号码'),
- \$ D4 Z. q* H. `9 s; C. O3 t* E  '#type' => 'textfield',6 k* [1 B" i" U, w
  '#required' => TRUE,! _" G3 [) I' O1 j- k# [! O1 b
  '#default_value' =>isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",- L: c+ }) J2 ~
  '#description' => t('例如:010-88888888'),
, F7 s9 q$ ~4 }: }6 a9 f );/ _. C- Z1 Z* c, I# d" S  `
1 d, n$ w% P4 o, A0 H  M
  //表单元素“邮件正文”
* P0 C5 ^* _' V' C+ U$ P+ ? $form['contact'] = array(7 v- B2 c8 V$ Z* c, _) J
  '#title' => t('邮件正文'),
4 r3 q* C' Z9 B" B' A6 }0 z  //表单元素的类型,这里为textarea5 j: r: {; S! n# }
  '#type' => 'textarea',
+ E" A, w4 \1 ^* X  '#required' => TRUE,
4 f9 {  Y2 C5 B  I  '#default_value' =>isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",, r. Y" q' F" Y  Y! B
);
* l2 ?) F1 ?0 x* H/ i: K ) w0 S& j4 m1 N6 l8 Y% R4 _( r9 t
//访问来源的可选项# o. H# N4 X; s8 P
$visit_options = array(
. G& G8 N; D& i8 O  'baidu' =>t('百度'),
4 Z1 H, D3 p8 ~6 ?5 U- r  'google' =>t('谷歌'),
) n8 b6 C  w7 n# a/ S0 d( M  'sohu' =>t('搜狐'),
3 y+ @4 C0 P0 O; o7 g5 ]# T  T  'other' =>t('其它'),
! ?. f; X% [. q, I5 B' d );
+ y$ y2 O* A7 @* } //表单元素“访问来源”' B6 w4 [) f/ w0 k* ^  F, {
$form['visit'] = array(' Y9 {* X3 P/ W7 F# e( Z
  '#title' => t('访问来源'),5 N, L& z% \* H- @
  //表单元素的类型,这里为radios7 y+ m( d( |0 N8 B. N0 Z
  '#type' => 'radios',, o7 C2 \5 T( `; x
  //单选按钮的可选项。
# F1 U  O# Z1 h0 J* q: E, ~  '#options' => $visit_options,5 [$ j% b5 H/ d3 E  E' T/ K! h
  '#default_value' =>isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
9 }- v" a: A, `, W9 t  //为了便于控制radios的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div
! _' P8 x7 P* o" Q  '#prefix' => '<div id="visit-radios">',
: a7 q! {0 {2 |3 r# a/ o, s7 L  '#suffix' => '</div>',) _7 X4 D8 B) z& E. |
);
+ g. y0 @  b! q" p% `' U % `: Z8 I/ G0 {# |( K( R1 i
//表单元素“其它”,它依赖于表单元素“访问来源”1 u8 |) Z4 Q% L, g* f4 I* k( I6 n
$form['other'] = array(2 w9 P. M8 e/ r" \. W
  '#title' => t('其它'),# P/ x8 L5 e' e& E7 X
  '#type' => 'textfield',
, W* L6 u- x8 ]9 d' w, _" o/ y. G  '#default_value' =>isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"",+ u% ^0 p3 f9 G6 f* ]" x- q, J
  //这里的意思是,当表单元素“访问来源”的值为“other”时,这个表单元素才显示出来8 S1 ?; ^/ H* x
   '#states' => array(
. E( H6 S" s) m5 ~    'visible' => array(- k* p* ~/ ]. F, s% s' i) i7 i
     ':input[name="visit"]' => array('value' => 'other'),
% {. i! L" ~9 E  b, Q8 b   ),
7 }  S  L& F5 H) _9 u% M0 B" L  ),
+ c# ^# m  P' i7 c );
5 P8 o  _. ^* {) m/ b /*
! t# {( U9 W" a7 K //表单元素“确认”提交按钮; b7 }8 r8 S+ R8 |2 v( V8 N6 F$ I, V
  $form['submit'] = array(- N# ~& o+ Z8 Y! s
    '#type' => 'submit',7 l0 ?: x* Y; x* A; j
    '#value' => t('确认')," C# j% m/ @5 ~- s* X8 u
  );
& s: {: Y, I. W0 E9 a  */
0 R, V* ?1 Q6 S& u8 t
( ~; F6 R+ C8 Q5 v4 _  //表单元素“确认”提交按钮,这里采用了图片的形式, J) m$ o: z6 \% y
  $form['image_submit'] = array(
7 s0 O' }( s4 D: d' q: J. ]5 B( ]: P   //表单元素的类型,这里为image_button/ q  m* S1 W/ R8 V
    '#type' => 'image_button',
$ z" d( F3 ]: T+ b; k9 j; U0 @* G: F1 C  / C6 o- ^  @/ b' R8 c
  //图片按钮特有的#src属性,
' G" L+ D; E; G; P$ D  M    '#src' => drupal_get_path('module','contactus').'/images/button1-1.jpg',
+ A4 P; |! B+ x) W) X    '#value' => 'image_sub'," ?3 e/ i. @1 {7 q- L. ~6 R/ P/ ~; B
  " ^5 w; Y6 D8 m3 ~7 G4 j. |
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果5 c  p8 t& U" v" o$ j% v' f
    '#attributes' =>array(
0 ]7 c5 B0 }+ F" r% Y- s) l( m      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-1.jpg'",
' n4 n' {. a* H/ Y6 D      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button1-2.jpg'",5 [6 T7 O, `0 |. t. x, J
    ),6 _# _# \( P; O* F
  7 H6 X0 t1 a1 b; Q6 |
  //为了便于控制image_button的外观,我们使用#prefix、#suffix为其添加了一个带有ID的div& N0 c4 B# {- ?; R, l
    '#prefix' => '<div id="image-submit">',
; w9 ~3 m; i6 U  p4 c1 w" M    '#suffix' => '</div>',, V, U) s# M; C' d. x4 |
  );  return $form;% Z& R2 W! \* |% D/ a' |
}/**( c- s2 t- i, h6 X) m
* contactus_form表单的验证函数: ?, c9 a; _" d; J9 g
*/
) O, t9 k+ A* afunction contactus_form_validate($form, &$form_state){
& X$ N7 L, _" T6 P# P4 Q3 Y$ g9 ~  //这里使用正则表达式,来验证邮箱的有效性,注意,这里的正则表达式,包围在"/...../"之间。9 I2 Y9 `$ F+ T1 Z
if(!preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $form_state['values']['mail'])){0 ?6 f7 w2 D, o: i% V
  form_set_error('mail',t('您输入的电子邮件地址格式不正确'));
; W) t3 m0 ?3 ^( D9 D, t }
9 a* O/ I! u$ {7 l5 D( G+ l}/**
% p' u+ s) f6 F. v * contactus_form表单的提交函数. n- }' P8 k' l5 f
*/
2 p2 L' P- _( j4 n. d( Dfunction contactus_form_submit($form, &$form_state){
0 u& r2 C3 I9 d% H  //把表单的值存放在会话中去,由于这里涉及到了两个不同的表单之间传值。- t9 ]6 ?$ D- z3 }: i+ g9 L9 y- o
$_SESSION['contactus_form'] = $form_state['values'];: @/ A2 v4 t2 Z: w4 }
//表单重定向到确认页面8 k) h! s% o3 c3 G; ~$ u! v  C
$form_state['redirect'] = 'contactus/confirm';) w% r0 J) Y# M+ K" \
- ~4 G/ G+ g" Z' t- N+ y
8 E( \0 N( H+ E; @6 N; Q

/ a0 Q' J" Y/ r+ }8 O) r0 V: c; v3.Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调星期一, 2011-08-22 23:35 — g089h515r806 /**
. C1 G9 b1 L  D" O9 h) e3 U * “确认”页面的回调函数5 o( [* d% i7 N
*/
- S) P5 \# \1 v5 ^# efunction contactus_confirm_page(){% Q+ `9 z8 M" i4 I$ e) k3 q
  //我们为这个页面设置标题
- P, k0 H4 c& E5 F" G drupal_set_title('联系我们');
. n7 Z* H( u+ i& _
5 @$ P4 \0 q/ Z //这里首先作了判断,如果会话中没有设置contactus_form,返回contactus
3 K7 ?+ x3 n; z  f if(empty($_SESSION['contactus_form'])){6 ?2 w9 U8 `/ ~' c1 p
  drupal_goto('contactus');, b$ R$ T1 O/ d7 r
}else{
4 V, D, s6 @: M8 m  ? } $render_array = array(
- X. L+ |1 H% C   '#markup' => '',
; J& M  g  K* l* C/ Q/ b );
+ p- t, o7 X4 e  b; ~1 l //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。& k3 n5 W& B# `* W; }% {9 S
$render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));( |1 [; q& x9 I3 ]! l
//Drupal7的页面回调,返回的应该是一个数组
9 i" E/ Y& m0 L( o  V4 u4 U return $render_array;$ z) m) J" J! A' r/ K; y
}/**" V1 m7 X$ I$ y
* “确认”表单的构建函数
# ~9 a+ P* c- ~" v5 g8 H: [% z# a. I */
, L/ ^" O: [# j( Q2 wfunction contactus_confirm_form(){0 @+ j- D% J+ q* W( Z
  //添加我们自己的CSS,用来控制表单的样式, }9 }/ b8 O; s+ U
drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');% u. ~+ w% ^4 U' h0 ^6 c
//drupal_set_message(print_r($_SESSION['contactus_form']));
* O6 N. l; }; \) b3 A0 X4 Y& t //表单元素“姓名”) k" W5 |) A; f
$form['name'] = array(
# C; }! v8 y1 c2 {6 @9 j# F8 p" ~  '#title' => t('姓名'),: _% g! e% I$ f7 |
  //表单元素的类型,这里为item! [  A+ D& Z# c1 y0 n" y; {
  '#type' => 'item',: h8 b( G: i  K$ B
  //'#default_value' => $_SESSION['contactus_form']['name'],
; F; M5 e. s# A4 g  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,3 g; ?. ]* _) j) f
  //最后改为#markup,才可以了3 s8 |# P7 `3 i/ J) d) w) A
  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",. J+ s  H% @5 u. Z( D' C2 k" Q
);) n* M2 S! B! l
; `# f6 \/ [2 K+ ?) s
  //表单元素“单位名称”
3 z) R  E6 w3 Y $form['company_name'] = array(
$ [7 T/ `7 ]' C9 N: }  H  '#title' => t('单位名称'),) R. c1 f1 B, B
  '#type' => 'item',& n4 N3 h7 F/ c5 G8 n, h* }6 @
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。* n$ p  Y( h+ [, ~2 \7 k8 N
  //'#value' => $_SESSION['contactus_form']['company_name'],! ]. f% I1 H+ p( r
  //'#value' => '123456',
; m$ v- |$ I2 T; I6 z  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",4 J. Q. k  W+ q; A0 \
  //'#description' => '123456',( K0 W4 D0 f; Q. T2 _% A4 C
);
& g1 Q' C3 g% j3 M& W) ~ ) ]- m+ k1 C# p; j! r  c3 u2 `5 L
//表单元素“电子邮件”
1 V4 t3 {6 v  w( v# v5 M+ r $form['mail'] = array(
- o* z6 a0 t- G; |: R% G' g  '#title' => t('电子邮件'),
2 E# o* }5 A% N* _  '#type' => 'item'," q, h+ s7 X- {! m" {4 f7 y$ J: Q
  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
, o9 j% k$ ], { );
; o; o. a% g. x+ s 5 n3 f6 J  j! E6 a/ H0 J
//表单元素“电话号码”
/ ^' @! t" f7 x2 H7 X  B $form['phone'] = array(5 Q5 C& d8 {0 A7 Y" t, J$ f
  '#title' => t('电话号码'),
5 [8 f$ S0 R  z$ e  W: T  '#type' => 'item',$ e1 ^5 n; z7 m: e) M" ?
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",# T( s) w2 b7 T6 ^( h! E3 C3 I
);% I: t" K( j: x
- r/ `! O: K- T$ Y, K" y
  //表单元素“邮件正文”$ V  z9 X6 t) b2 q! ^
$form['contact'] = array(
7 D) k2 L. W+ o/ V3 f  '#title' => t('邮件正文'),; Q' ~* N$ C. U  R6 V# X! {+ A
  '#type' => 'item',
) |6 X& \& z/ D- C( Q9 z% r  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",% }  q4 ?- D0 Y2 Y: z4 t
);: s4 V) h- w2 `9 T2 ~
" a" J& T! L) N+ S; p! a
//表单元素“访问来源”3 P3 K' l: p4 {  {# c- m6 c1 h0 j
$form['visit'] = array(, q* D/ w8 Y( C$ j8 _
  '#title' => t('访问来源'),
. O( H. C* {, h5 W- ]: g  '#type' => 'item',% v; y9 n# Y  }4 L( U
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",. O" S7 a2 x* y
);
3 ~- r0 r+ D/ J4 J+ D1 \+ c. o' T: r
/ B- K: P: i8 g, I5 Z //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。4 _8 v! j' W8 t+ m3 [# d5 [+ `
if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
- u2 \+ |/ R( N1 h  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";/ a" ^% }* V5 V
}
4 H/ y- T+ E! L/ q* I4 t6 @ /*
0 Z* l' [; j+ d: B! X6 _ //表单元素“返回”按钮
3 E  X3 C6 B- n# B: z6 A  $form['back'] = array(
, p* b3 N3 B: a$ @6 o/ V* p% [8 a    '#type' => 'submit',) ]3 P. u  z. `% k
    '#value' => t('返回'),
5 K8 g5 u# F% O* }! g# g1 i* @    '#submit' => array('contactus_confirm_form_back'),! e4 l5 @2 y2 Q! e+ S; L( L
  );; J( Y. M7 p  X
//表单元素“提交”按钮
7 I7 Z. Y3 ^8 I' C$ p+ ~  $form['submit'] = array(
2 g/ A8 D) t5 t    '#type' => 'submit',
: t8 ]$ ^6 H6 Q% u% t! G. \' M    '#value' => t('提交'),
4 N! o0 e+ ]3 f) u% R0 l  );
) R3 D  `7 F3 T: n* l  */! w& e% q' F. M# u  H$ N) K& _

% m6 w$ o, v$ n" T& D  //表单元素“返回”图片按钮3 O1 ]- c, O8 z( ~) M
  $form['image_back'] = array(5 _; G1 [7 R  e& Q8 x
    '#type' => 'image_button',
! `: j- D. y, o    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',& h$ t, y8 d9 S) W5 `7 u
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back
8 V: }; _4 H* b  A3 y. ~    '#submit' => array('contactus_confirm_form_back'),
4 W8 D( O2 O7 N+ L1 u# @: N    '#executes_submit_callback' => TRUE,1 u6 r8 G' w" J, `9 J
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
" |! d% \0 @2 A5 d    '#attributes' =>array(
: j7 V8 ?* u4 f5 I! l# O      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'"," S' j# m( {; K' _! h5 i
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",6 i% R. _( J- W) s1 K
    ),
  _2 ^4 N# V7 U+ [* d+ i" a6 j  );
2 Y8 Q( ], f/ K2 j+ \8 n% _2 [
8 b( b- U6 [0 ]  _  //表单元素“提交”图片按钮  w) j2 I% x3 S6 o( F
  $form['image_submit'] = array(
: q/ [& `) {/ ]8 T7 F( t+ ]    '#type' => 'image_button',
3 P' Z$ `7 |& i+ \. l    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',
& l; ~' T1 @! @6 f2 Q9 I5 [% z. O    '#executes_submit_callback' => TRUE," I- Z5 o* x. v7 s2 h) I: |# z' y  T0 j
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit4 }) V8 l3 R+ e" t5 U
    '#submit' => array('contactus_confirm_form_submit'),0 b7 M' o, ]" u! N7 k" V# F' F5 T
    '#attributes' =>array() n& ^( F3 b' [7 H- \5 c
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",- u% L6 V9 M& j. J+ J  ~
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
% R+ a3 R6 w. y+ ^7 E; ]5 U: `    ),- e  M6 [- }1 Y  U% S% A
  );7 m3 ?1 l0 g* X* d, k
  
$ Q( M: e; z7 C% Y2 E3 W  return $form;
. Q: q2 a/ W+ n% t5 V* Z* d  o$ G}/**8 k3 D/ s9 l3 O. ?, Q* @, l
* 返回按钮对应的提交函数! d0 q7 P/ M! ], w! N) f; n
*/" D4 T  {7 G3 p+ u, j* h
function contactus_confirm_form_back($form, &$form_state){
6 E$ M+ Z6 P: T( W! j& C  Y# w# e  //简单的重定向到contactus页面
0 l$ f- i1 A+ X $form_state['redirect'] = 'contactus';3 B4 Z7 _0 B# V
}/**
+ X, g5 t' F* R  z * 提交按钮对应的提交函数8 a7 r$ o: w7 p& t9 b3 f3 s  Y; `
*/: x' \8 o* x. h0 Y. S6 S1 l
function contactus_confirm_form_submit($form, &$form_state){
" x9 W- m+ n; t! \, t8 d$ B4 V $values = NULL;5 h6 U% `% U) U, y3 W6 `
//从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。; C+ J2 c% `# ^$ @" u" n
if(empty($_SESSION['contactus_form'])){
  K4 t# L' L' D' n  drupal_goto('contact');
, l; F2 [# L0 S4 K& \ }else{1 H' d- h& r( P  j
  $values = $_SESSION['contactus_form'];
6 h  I5 x* I" r1 S; y3 O  unset($_SESSION['contactus_form']);
3 H# q  i, ^3 X# f' @% |1 h$ z }
/ L' Z# T+ Z% H8 G! C8 t3 } 7 @9 d! j2 j) t4 D- A4 k
//收件人地址,这里为作者的邮箱
, n! f0 H" D/ F# g) h $to = 'g089h515r806@gmail.com';
8 v6 V6 u- c. L8 d+ v% Z //用户填写的邮箱地址
4 v; f3 a3 |$ o9 A. { $from = $values['mail'];- N/ \1 B0 G' V  L. s' o
2 W3 ^) I/ J+ G( C/ L1 g
//发送邮件
5 B$ X8 r5 m) a: ?* V drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);
2 ?( O% Q; N' C" [/ r7 x, `( d7 H
4 D4 O$ {+ h2 r8 ~ //简单的重定向到致谢页面4 D4 p" H8 ^; }  c/ J5 T% Q- D
$form_state['redirect'] = 'contactus/thanks';
- D# B% F$ T- q- y8 }}/**
& x2 w9 K& R9 S: y2 y9 |& d. j * “致谢”页面的回调函数; |! p2 v' M- z  H
*/  N4 Q% q. h  {& @0 _( N3 Q1 Q
function contactus_thanks_page(){
; O9 z5 b! d2 Q0 l$ o  //我们为这个页面设置标题& i+ D9 C- n9 f7 S4 _
drupal_set_title('联系我们');
- M9 T! Y$ V, v) W8 l2 r, R $render_array = array(
+ {6 M5 |1 r6 I' J3 H% h   '#markup' => '',
* C! c7 E% l; V2 i3 }6 ?& t );
6 q3 _/ b/ ~$ R  M //Drupal7的页面回调,返回的应该是一个数组
/ `/ `+ h7 B! r& F9 l $render_array['#markup'] .= '<div id="contactus-thanks">';
% p; l5 {+ I; r( S! \$ s7 w3 { $render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
1 w7 ]& y/ A) j' M; ] $render_array['#markup'] .= '</div>';
& A5 d( a- G( ?, w$ B+ h! T% T
. o" ^+ I7 h1 |2 m$ I* F return $render_array;( J# B5 D. [8 i  P# L
}
* s9 h  P* `6 ^3 K6 P
& ?. B2 u: b7 y- `8 T7 {( G& K& f3 w  t" Y- b9 N- p5 A

" p5 ^% n. B# Z  u
7 l1 [, Z! ~" p" k' j
. V# l( M4 A. g' b' m7 a
2 n0 L  A, b; i
6 x' j' V0 ^, ^( o5 Z
1 U- W5 ?8 }# `8 I2 p, [/ K% E6 g3 t& \% c" d

6 H. l) w& {2 u9 I5 K2 z, g$ U* x/ A: L7 h

6 `. D: }8 C& A+ A& p

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

GMT+8, 6-17-2025 12:44 , Processed in 0.937854 second(s), 184 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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