Drupal Form:want to show previous form value as default_value on page

后端 未结 8 1573
春和景丽
春和景丽 2020-12-31 20:57

My Goal is if user is submitting this form with \"Product Name\" value as \"YYY\". On submit page should reload but this time \"Product Name\" should show previous valye as

8条回答
  •  盖世英雄少女心
    2020-12-31 21:39

    You can use $form_state['storage'] in your submit handler to hoard values between steps. So add a submit function like so:

    function addnewproduct_form_submit ($form, &$form_state) {
      // Store values
      $form_state['storage']['addnewproduct_productname'] = $form_state['values']['productname'];
      // Rebuild the form
      $form_state['rebuild'] = TRUE;    
    }
    

    Then your form builder function would become:

    function addnewproduct_form(&$form_state) { 
    
    $form = array();
    
    $form['productname'] = array (
    '#type' => 'textfield',
    '#title' => t('Product Name'),
    '#required' => TRUE,
    '#size' => '20',
    
    );
    
    if (isset($form_state['storage']['addnewproduct_productname'])) {
      $form['productname']['#default_value'] = $form_state['storage']['addnewproduct_productname'];
    }
    
    return $form;
    }
    

    Just remember that your form will keep being generated as long as your $form_state['storage'] is stuffed. So you will need to adjust your submit handler and unset($form_state['storage']) when are ready to save values to the database etc.

    If your form is more like a filter ie. used for displaying rather than storing info, then you can get away with just

    function addnewproduct_form_submit ($form, &$form_state) {
      // Rebuild the form
      $form_state['rebuild'] = TRUE;    
    }
    

    When the form rebuilds it will have access to $form_state['values'] from the previous iteration.

提交回复
热议问题