A simple multistep form with a Next and a Back button - Drupal7

function hook_menu() {
  $items = array();
  $items['ts_multistep'] = array(
    'title' => 'ts_multistep',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('ts_multistep'),
    'access callback' => TRUE,
  );
 return $items;
}

//-------------------------------------- Form 1 ----------------------------------------------------

function ts_multistep($form, &$form_state) {

  if (!empty($form_state['page_num']) && $form_state['page_num'] == 2) {
    return ts_multistep_page_two($form, $form_state);
  }
 if (!empty($form_state['page_num']) && $form_state['page_num'] == 3) {
  return ts_multistep_page_three($form, $form_state);
 }

$form_state['page_num'] = 1;

$form['ts_name'] = array(
  '#type' => 'textfield',
  '#title' => t('ts_name'),
  '#size' => 20,
  '#maxlength' => 20,
  '#required' => TRUE,
  '#default_value' => !empty($form_state['values']['ts_name']) ? $form_state['values']['ts_name'] : '',
);

$form['ts_next'] = array(
  '#type' => 'submit',
  '#value' => 'Next >>',
  '#submit' => array('ts_multistep_ts_next_submit'),
  '#validate' => array('ts_multistep_ts_next_validate'),
 );
  return $form;
}

//----------------------------------------- Form 2 -------------------------------------------------

function ts_multistep_page_two($form, &$form_state) {

$form['email'] = array(
  '#type' => 'textfield',
  '#title' => t('Email'),
  '#required' => TRUE,
  '#default_value' => !empty($form_state['values']['email']) ? $form_state['values']['email'] : '',
);

$form['back'] = array(
  '#type' => 'submit',
  '#value' => t('<< Back'),
  '#submit' => array('ts_multistep_page_two_back'),
  '#limit_validation_errors' => array(),
);
$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Next >>'),
  '#submit' => array('ts_multistep_page_two_submit'),
);
return $form;
}

//------------------------------------------ Form 3 ------------------------------------------------

function ts_multistep_page_three($form, &$form_state) {
$form['phone'] = array(
  '#type' => 'textfield',
  '#title' => t('Phone'),
  '#required' => TRUE,
  '#default_value' => !empty($form_state['values']['phone']) ? $form_state['values']['phone'] : '',
);

$form['back'] = array(
  '#type' => 'submit',
  '#value' => t('<< Back'),
  '#submit' => array('ts_multistep_page_three_back'),
  '#limit_validation_errors' => array(),
);
$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Submit'),
  '#submit' => array('ts_multistep_page_three_submit'),
);
 return $form;
}

//------------------------------------------ Validate -----------------------------------------------

function ts_multistep_ts_next_validate($form, &$form_state) {
  // validate code here...
}

//------------------------------------------- Back ---------------------------------------------------

function ts_multistep_page_two_back($form, &$form_state) {
  $form_state['values'] = $form_state['page_values'][1];
  $form_state['page_num'] = 1;
  $form_state['rebuild'] = TRUE;
}

function ts_multistep_page_three_back($form, &$form_state) {
  $form_state['values'] = $form_state['page_values'][2];
  $form_state['page_num'] = 2;
  $form_state['rebuild'] = TRUE;
}

//------------------------------------- Submit Handlers ------------------------------------

function ts_multistep_ts_next_submit($form, &$form_state) {
  $form_state['page_values'][1] = $form_state['values'];

  if (!empty($form_state['page_values'][2])) {
    $form_state['values'] = $form_state['page_values'][2];
  }
  $form_state['page_num'] = 2;
  $form_state['rebuild'] = TRUE;
}

function ts_multistep_page_two_submit($form, &$form_state) {
  $form_state['page_values'][2] = $form_state['values'];

  if (!empty($form_state['page_values'][3])) {
    $form_state['values'] = $form_state['page_values'][3];
  }
  $form_state['page_num'] = 3;
  $form_state['rebuild'] = TRUE;
}

function ts_multistep_page_three_submit($form, &$form_state) {
  $form_state['page_values'][3] = $form_state['values'];
  //dsm($form_state['page_values']);
  drupal_set_message(t('The form has been submitted.'));
}

For more information please refer to module Drupal example: form example tutorial 8

 

Tags

Add new comment

Restricted HTML

  • Allowed HTML tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.
3 + 1 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.