Thursday, December 17, 2015

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


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

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

function multistep($form, &$form_state) {

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

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

  $form['next'] = array(
    '#type' => 'submit',
    '#value' => 'Next >>',
    '#submit' => array('multistep_next_submit'),
    '#validate' => array('multistep_next_validate'),
  );
  return $form;
}


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

function 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('multistep_page_two_back'),
    '#limit_validation_errors' => array(),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Next >>'),
    '#submit' => array('multistep_page_two_submit'),
  );
  return $form;
}

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

function 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('multistep_page_three_back'),
    '#limit_validation_errors' => array(),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
    '#submit' => array('multistep_page_three_submit'),
  );
  return $form;
}

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

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

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

function 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 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 multistep_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 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 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 refer Drupal example module: form_example_tutorial_8

Tuesday, December 15, 2015

Add CSS files and JavaScript files at the bottom of a page in Drupal 7

template_preprocess_html() in template.php file. Preprocess variables for html.tpl.php

function themename_preprocess_html(&$variables) {

  // Add external file
  drupal_add_css('https://fonts.googleapis.com/css?family=Roboto:400,300,500,700',array('type' => 'external'));

  // Add Javascript file at the bottom of a page
  drupal_add_js('/sites/all/themes/purple/js/bootstrap.min.js', array('type' => 'file', 'scope' => 'footer', 'weight' => 10));

}