2012-06-11 21 views
1

我在Drupal 7 - FAPI中創建一個多步驟窗體。Drupal 7 - FAPI多步驟窗體 - 清除form_state值 - 添加onther選項

在主要的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 I有一個可選的按鈕「添加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 ['values'],但沒有成功。誰可以實現添加其他功能的多步驟?

+0

我試過你的解決方案張貼在http://drupal.stackexchange.com/questions/33740/drupal-7-fapi-multistep-form-with-add-another-option/33804#33804這給了我想要的結果。 –

回答

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

+0

form_set_value($ element,$ value,&$ form_state)給了我一個固定的值,並且用戶的輸入被忽略了。但是我在http://drupal.stackexchange.com/questions/33740/drupal-7-fapi-multistep-form-with-add-another-option/33804#33804上使用瞭解決方案 –

相關問題