Drupal 7 - многоступенчатая форма FAPI - очистить значения form_state - добавить другую опцию

Я создаю многошаговую форму в Drupal 7 - FAPI.

В основной функции hook_form() перенаправление на разные этапы осуществляется вручную.

function hook_form($form, &$form_state) { 
    if (empty($form_state['storage']['step'])) {
        $form_state['storage']['step'] = 0;
    }  

    switch($form_state['storage']['step']) {
        case 0:
          $form=  _step_0($form, $form_state);
        break;
        case 1:
          $form =  _step_1($form, $form_state);
        break;
        case 2:
          $form =  _step_2($form, $form_state);
        break;
        case 3:
          $form =  _step_3($form, $form_state);
        break;
        case 99:
          $form =  _step_end($form, $form_state);
        break;
    }
    return $form;
}

На шаге 2 у меня есть дополнительная кнопка "Добавить еще", которая сохраняет значения form_values ​​в хранилище и перезагружает ту же форму (шаг 2). Но когда он перезагружает эту форму в течение секунд. предыдущие значения формы представляются как значения формы по умолчанию, а не как пустая (новая) форма, которая требуется.

function inschrijven_form_submit($form, &$form_state) {
    switch ($form_state['storage']['step']) {

        case 0:
          switch($form_state['values']['op']) {
            case 'Next' :
              ....
              $form_state['storage']['step'] = 1;
            break;
          }
        break;

        case 1:
          switch($form_state['values']['op']) {
            case 'Next' :
              ....
              $form_state['storage']['step'] = 2;
            break;
          }
        break;

        case 2:
            switch($form_state['values']['op']) {
                case 'Next' :
                    ....
                    $form_state['storage']['step'] = 3;
                break;

                case 'Add another' :
                    $form_state['rebuild'] = TRUE;
                    ....
                    $form_state['storage']['step'] = 2;
                    return;
                break;

        .....

    }
}

Я пытался очистить form_state['values'] вручную после каждой отправки, но безуспешно. Кому может быть обеспечен этот многоступенчатый шаг с дополнительным функционалом?

1 ответ

Функция, которую вы ищете, это form_set_value ($ element, $ value и $form_state).

Формы API немного сложнее. При работе с FAPI я рассуждал, что $ form_state всегда отражает переменную $ form, которая передается в форму. $ form_state позволяет легко получить значения. Каждый раз, когда вы переключаетесь на другую проверку, создается впечатление, что $ form_state обновляется из значений "$ form".

Если вы используете form_set_value, вы сможете передавать состояние между валидациями.

Ура! http://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7

Другие вопросы по тегам