Drupal 7 - FAPI多步形式 - 清除form_state值 - 添加onther选项

时间:2012-06-11 09:20:53

标签: drupal drupal-7 drupal-fapi drupal-form-submission

我在Drupal 7 - FAPI中创建了一个多步骤表单。

在主hook_form()中,对不同步骤的重定向是handeled。

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步中,我有一个可选按钮' Add onther'这会将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 ['值'],但没有成功。谁可以通过添加其他功能实现多步骤?

1 个答案:

答案 0 :(得分:0)

您正在寻找的函数是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