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

后端 未结 8 1391
春和景丽
春和景丽 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.

    0 讨论(0)
  • 2020-12-31 21:42

    simply adding rebuilt = true will do the job:

      $form_state['rebuild'] = TRUE;
    

    version: Drupal 7

    0 讨论(0)
  • 2020-12-31 21:43

    In my case I had a couple of drop-downs. Submitting the form posted back to the same page, where I could filter a view and I wanted to show the previously selected options. On submitting the form I built a query string in the submit hook:

    function myform_submit($form, &$form_state) {
    
      $CourseCat = $form_state['values']['coursecat']; 
    
      drupal_goto("courses" , array('query' => 
        array('cat'=>$CourseCat))
      );
    }
    

    In the form build hook, all I did was get the current query string and used those as default values, like so:

    function myform_form($form, &$form_state) {
      $Params = drupal_get_query_parameters ();
      $CatTree = taxonomy_get_tree(taxonomy_vocabulary_machine_name_load ('category')->vid);
    
      $Options = array ();
      $Options ['all'] = 'Select Category';
      foreach ($CatTree as $term) {
            $Options [$term->tid] = $term->name;
      } 
      $form['cat'] = array(
        '#type' => 'select',
        '#default_value' => $Params['cat'],      
        '#options' => $Options
      );
    
      $form['submit'] = array(
        '#type' => 'submit',
        '#default_value' => 'all',
        '#value' => t('Filter'),
      );
    
      return $form;
    }
    
    0 讨论(0)
  • 2020-12-31 21:46

    For anyone looking for an answer here while using webform (which I just struggled through), here's what I ended up doing:

    //in hook_form_alter
    $form['#submit'][] = custom_booking_form_submit;
    
    function custom_booking_form_submit($form, &$form_state) {
    //  drupal_set_message("in form submit");
    //  dpm($form_state, 'form_state');
    
        foreach ($form_state['values']['submitted_tree'] as $form_state_key => $form_state_value) {
    
            $form_state['storage'][$form_state_key] = $form_state_value;
        }
    }
    

    Note: added the ' as it was lost

    0 讨论(0)
  • 2020-12-31 21:47

    I prefer to save all values in one time when we are speaking about complex forms :

    foreach ($form_state['values'] as $form_state_key => $form_state_value) {
        $form_state['storage'][$form_state_key] = $form_state['values'][$form_state_value];
    }
    
    0 讨论(0)
  • 2020-12-31 21:48

    Not sure if this would work for you, but you could try adding the #default_value key to the form array

    $form['productname'] = array (
    '#type' => 'textfield',
    '#title' => t('Product Name'),
    '#required' => TRUE,
    '#size' => '20',
    '#default_value' => variable_get('productname', ''),
    );
    

    That way if the variable is set it will grab whatever it is, but if not you can use a default value.

    0 讨论(0)
提交回复
热议问题