You are here

Drupal 7 中文教程 联系我们 两步表单 “确认”页面回调

g089h515r806 的头像
Submitted by g089h515r806 on 星期一, 2011-08-22 15:35

/**
 * “确认”页面的回调函数
 */
function contactus_confirm_page(){
  //我们为这个页面设置标题
 drupal_set_title('联系我们');
 
 //这里首先作了判断,如果会话中没有设置contactus_form,返回contactus
 if(empty($_SESSION['contactus_form'])){
  drupal_goto('contactus');
 }else{
 }

 $render_array = array(
   '#markup' => '',
 );
 //该页面的正文为一个表单,注意对于表单,这里需要使用drupal_render呈现一下。
 $render_array['#markup'] .= drupal_render(drupal_get_form('contactus_confirm_form'));
 //Drupal7的页面回调,返回的应该是一个数组
 return $render_array;
}

/**
 * “确认”表单的构建函数
 */
function contactus_confirm_form(){
  //添加我们自己的CSS,用来控制表单的样式
 drupal_add_css(drupal_get_path('module', 'contactus').'/contactus.css');
 //drupal_set_message(print_r($_SESSION['contactus_form']));
 //表单元素“姓名”
 $form['name'] = array(
  '#title' => t('姓名'),
  //表单元素的类型,这里为item
  '#type' => 'item',
  //'#default_value' => $_SESSION['contactus_form']['name'],
  //表单元素的#markup,在Drupal6下面,我用的是#value,在7下面就无法工作,改为了#default_value,还是不行,
  //最后改为#markup,才可以了
  '#markup' => isset($_SESSION['contactus_form']['name'])?$_SESSION['contactus_form']['name']:"",
 );
 
  //表单元素“单位名称”
 $form['company_name'] = array(
  '#title' => t('单位名称'),
  '#type' => 'item',
  //这是我在调试的时候,使用#value、#default_value、#description分别测试时的代码,这里保留了。
  //'#value' => $_SESSION['contactus_form']['company_name'],
  //'#value' => '123456',
  '#markup' => isset($_SESSION['contactus_form']['company_name'])?$_SESSION['contactus_form']['company_name']:"",
  //'#description' => '123456',
 );
 
 //表单元素“电子邮件”
 $form['mail'] = array(
  '#title' => t('电子邮件'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['mail'])?$_SESSION['contactus_form']['mail']:"",
 );
 
 //表单元素“电话号码”
 $form['phone'] = array(
  '#title' => t('电话号码'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['phone'])?$_SESSION['contactus_form']['phone']:"",
 );
 
  //表单元素“邮件正文”
 $form['contact'] = array(
  '#title' => t('邮件正文'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['contact'])?$_SESSION['contactus_form']['contact']:"",
 );
 
 //表单元素“访问来源”
 $form['visit'] = array(
  '#title' => t('访问来源'),
  '#type' => 'item',
  '#markup' => isset($_SESSION['contactus_form']['visit'])?$_SESSION['contactus_form']['visit']:"",
 );
 
 //如果访问来源,我们选择了“其它”,此时使用other表单元素的值来替换$form['visit']['#markup']。
 if( isset($_SESSION['contactus_form']['visit']) && $_SESSION['contactus_form']['visit'] == 'other'){
  $form['visit']['#markup'] = isset($_SESSION['contactus_form']['other'])?$_SESSION['contactus_form']['other']:"";
 } 
 /*
 //表单元素“返回”按钮
  $form['back'] = array(
    '#type' => 'submit',
    '#value' => t('返回'),
    '#submit' => array('contactus_confirm_form_back'),
  );
 //表单元素“提交”按钮
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('提交'),
  );
  */
 
  //表单元素“返回”图片按钮
  $form['image_back'] = array(
    '#type' => 'image_button',
    '#src' => drupal_get_path('module','contactus').'/images/button2-1.jpg',
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_back
    '#submit' => array('contactus_confirm_form_back'),
    '#executes_submit_callback' => TRUE,
  //为表单元素添加两个属性,onmouseout、onmouseover,为了在鼠标移到按钮上时,显示不同的图片效果
    '#attributes' =>array(
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-1.jpg'",
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button2-2.jpg'",
    ),
  );
 
  //表单元素“提交”图片按钮
  $form['image_submit'] = array(
    '#type' => 'image_button',
    '#src' => drupal_get_path('module','contactus').'/images/button3-1.jpg',
    '#executes_submit_callback' => TRUE,
  //使用这个按钮提交时,对应的提交处理函数为contactus_confirm_form_submit
    '#submit' => array('contactus_confirm_form_submit'),
    '#attributes' =>array(
      'onmouseout' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-1.jpg'",
      'onmouseover' => "this.src='".base_path().drupal_get_path('module','contactus')."/images/button3-2.jpg'",
    ),
  );
 
  return $form;
}

/**
 * 返回按钮对应的提交函数
 */
function contactus_confirm_form_back($form, &$form_state){
  //简单的重定向到contactus页面
 $form_state['redirect'] = 'contactus';
}

/**
 * 提交按钮对应的提交函数
 */
function contactus_confirm_form_submit($form, &$form_state){
 $values = NULL;
 //从会话中获取用户最初提交的值,并将$_SESSION['contactus_form']置为空。
 if(empty($_SESSION['contactus_form'])){
  drupal_goto('contact');
 }else{
  $values = $_SESSION['contactus_form'];
  unset($_SESSION['contactus_form']);
 }
 
 //收件人地址,这里为作者的邮箱
 $to = 'g089h515r806@gmail.com';
 //用户填写的邮箱地址
 $from = $values['mail'];
 
 //发送邮件
 drupal_mail('contactus', 'contact', $to, language_default(), $values, $from);
 
 //简单的重定向到致谢页面
 $form_state['redirect'] = 'contactus/thanks';
}

/**
 * “致谢”页面的回调函数
 */
function contactus_thanks_page(){
  //我们为这个页面设置标题
 drupal_set_title('联系我们');
 $render_array = array(
   '#markup' => '',
 );
 //Drupal7的页面回调,返回的应该是一个数组
 $render_array['#markup'] .= '<div id="contactus-thanks">';
 $render_array['#markup'] .= t('感谢您的来信,我们会在第一时间给您回复。');
 $render_array['#markup'] .= '</div>';
 
 return $render_array;
}
 

Drupal版本: