not president's blog

脳直で書きます。自分が覚えたい事を書いているだけです。

フォームAPIの続き5

form再表示の際にform_stateの値を使用する方法

formを再構築させれば良い。
具体的には、hook_form_submitの中で
$form_state['rebuild'] = TRUE;
を定義してやればよい。

Formが再表示する際にカウントアップ

1.Formの定義

<?php
/**
  * hook_menu()の例
  */
  function multiform_menu(){
      $items['multiform'] = array(
           'title' => t('Multi Page'),
           'page callback' => 'drupal_get_form',
           'page arguments' => array('multiform_exampleform'),
           'type' => MENU_NORMAL_ITEM,
           'access arguments' => array('access content'),
      );
      return $items;
  }
  
  function multiform_exampleform($form,&$form_state){
    $step = isset($form_state['values']) ?(int)$form_state['storage']['step'] : 0;
    $form_state['storage']['step'] = $step + 1;    
    $form['indicator'] = array(
            '#type' => 'fieldset',
            '#title' => t('Step @number',array('@number' => $step))
    );
    $form['submit'] = array(
            '#type' => 'submit',
            '#value' => 'submit'
    );
    return $form;
}
?>

2.Submit関数を定義

<?php
/**
 * 
 */
function multiform_exampleform_submit($form,&$form_state){
    $form_state['rebuild'] = TRUE;
     return;
}
?>

これを表示して、Submitを押すと、
(初期表示) f:id:orenodrupal:20150405223235j:plain (Submit1回目) f:id:orenodrupal:20150405223244j:plain (Submit2回目) f:id:orenodrupal:20150405223251j:plain カウントアップされる。
php $form_state['rebuild'] = TRUE;を設定していると、
Submit後にFomrが再構築される。(=form_stateの値がmultiform_exampleformで使用 できる) ただそれだけです。