1

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 をストレージに保存し、同じフォームをリロードするオプションの「Add onther」ボタンがあります (ステップ 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'] を手動でクリアしようとしましたが、成功しませんでした。別の機能を追加するこのマルチステップを誰が達成できますか?

4

1 に答える 1

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

于 2012-06-11T18:46:30.773 に答える