Создание, продвижение сайтов
компьютерная поддержка
53-02-63

Создание многошаговых форм (multistep form)

14 января 2017

Пример создания формы из трёх шагов:

/**
 * Form builder.
 */
function modulename_test_form($form, &$form_state) {
  if (!isset($form_state['step'])) {
    $form_state['step'] = 1;
    $form_state['steps_values'] = array();
  }
  $step = $form_state['step'];
  $max_step = 3;
  $values = &$form_state['values'];
 
  // Step 1
  if ($step == 1) {
    $form['firstname'] = array(
      '#type' => 'textfield',
      '#title' => 'First name',
      '#default_value' => isset($values['firstname']) ? $values['firstname'] : '',
    );
  }
  // Step 2
  elseif ($step == 2) {
    $form['lastname'] = array(
      '#type' => 'textfield',
      '#title' => 'Last name',
      '#default_value' => isset($values['lastname']) ? $values['lastname'] : '',
    );
  }
  // Step 3
  elseif ($step == 3) {
    ...
  }
 
  // Buttons
  $form['actions'] = array(
    '#type' => 'actions',
  );
 
  if ($step > 1) {
    $form['actions']['prev'] = array(
      '#type' => 'submit',
      '#value' => 'Prev',
      '#submit' => array('modulename_test_form_prev'),
      '#limit_validation_errors' => array(),
    );
  }
  if ($step < $max_step) {
    $form['actions']['next'] = array(
      '#type' => 'submit',
      '#value' => 'Next',
      '#submit' => array('modulename_test_form_next'),
    );
  }
  else {
    $form['actions']['submit'] = array(
      '#type' => 'submit',
      '#value' => 'Finish',
    );
  }
 
  return $form;
}
 
/**
 * Next callback.
 */
function modulename_test_form_next($form, &$form_state) {
  $step = &$form_state['step'];
  $form_state['rebuild'] = TRUE;
 
  // Save current step values
  $form_state['steps_values'][$step] = $form_state['values'];
 
  // Change step
  $step++;
 
  // Restore next step values
  $form_state['values'] = isset($form_state['steps_values'][$step]) ? $form_state['steps_values'][$step] : array();
}
 
/**
 * Prev callback.
 */
function modulename_test_form_prev($form, &$form_state) {
  $step = &$form_state['step'];
  $form_state['rebuild'] = TRUE;
 
  // Change step
  $step--;
 
  // Restore prev step values
  $form_state['values'] = $form_state['steps_values'][$step];
}
 
/**
 * Finish callback.
 */
function modulename_test_form_submit($form, &$form_state) {
  // Merge steps values
  $form_state['values'] += call_user_func_array('array_merge', $form_state['steps_values']);
 
  dsm($form_state['values']);
}

Узнайте о нас больше:

Мы предлагаем широкий спект услуг по сайтам и компьютерной поддержке

Создание сайтов

Мы разрабатываем как простые сайты - визитки, так и индивидуальные проекты. Основная система разработки - CMS Drupal.

Узнать подробнее

Продвижение сайтов

Одно из основных направлений работы нашей компании - продвижение сайтов в Саратове и области. Мы поможем Вам с SEO - продвижением сайтов и настройкой и ведением контекстной рекламы в Яндекс Директ.

Бесплатная SEO-консультация

Компьтерная поддержка

Мы оказываем услуги компаниям и частным лицам в области настройки компьютерного оборудования:

  • Настройка роутеров и локальных сетей
  • Установка Windows
  • Оптимизация работы компьютеров
  • Лечение вирусов
  • Восстановление данных с жестких дисков
Узнать подробнее
Сделайте заказ с сайта и получите 10% скидку на услугу

Заказ услуги с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
Заказать бесплатную SEO-консультацию

Запрос бесплатной SEO - консультации с сайта raybin.ru

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности
Письмо в компанию Райбин

Письмо в компанию RAYBIN

Нажимая на кнопку "Получить консультацию", я даю согласие на обработку персональных данных и соглашаюсь c условиями политики конфиденциальности