web-gelistirme-sc.com

$ Form_state [‘yeniden oluştur’] örneği

Birisi bana kullanıcının girişinden sonra $form_state['rebuild'] Kullanarak formu yeniden oluşturmak için bir örnek verebilir misiniz?

4
Satya

$ form_state ['rebuild'] çok aşamalı formlarda yaygın olarak kullanılmaktadır. Örnekler projesi içindeki Form Örneği'ndeki daha gelişmiş örneklere bir göz atın. AJAX formlarında, çok aşamalı özel bir durum olarak kullanılır, bu nedenle AJAX örneğine bakmak isteyebilirsiniz.

5
rfay

Aşağıdaki örnekte, yolcu adlarını doldurmak için iki metin alanı listelenmiştir. Kullanıcı bir yolcu daha eklemek istiyorsa (bir metin alanı daha), 'yolcu ekle' düğmesine tıklandığında form yeniden oluşturulmalıdır. Bu yardımcı olur umarım.

function add_passenger_form($form, &$form_state){
    //$form['#tree'] = TRUE;

   if(!isset($form_state['num_names'])){
      $form_state['num_names'] = 2;
   }

   $form['passenger_fieldset'] = array(
      '#type' => 'fieldset',
      '#title' => t('List of Passengers'),
      '#prefix' => '<div id="passenger-form-wrapper">',
      '#suffix' => '</div>',
    );

   for ($i = 0; $i < $form_state['num_names']; $i++) {
     $form['passenger_fieldset']['passenger_name'][$i] = array(
       '#type' => 'textfield',
       '#title' => t('Passenger Name'),
       '#required' => false,
     );
   }

   $form['passenger_fieldset']['add_button']= array(
    '#type' => 'submit',
    '#value'=> t('Add passenger'),
    '#submit' => array('add_passenger_form_add_one'),
    '#ajax' => array(
        'callback' => 'add_passenger_form_callback',
        'method' => 'replace',
        'effect' => 'fade',
        'wrapper' => 'passenger-form-wrapper',
    ),
  );

   if ($form_state['num_names'] > 2) {
     $form['passenger_fieldset']['remove_button'] = array(
      '#type' => 'submit',
      '#value' => t('Remove Passenger'),
      '#submit' => array('remove_passenger_form_remove_one'),
      '#ajax' => array(
        'callback' => 'add_passenger_form_callback',
        'method' => 'replace',
        'effect' => 'fade',
        'wrapper' => 'passenger-form-wrapper',
        ),
      );
   }

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
    );

  return $form;
}
/* 
* add a textfield one more
*/
function add_passenger_form_add_one($form, &$form_state) {
  $form_state['num_names']++;
  // rebuild whole form with new values
  $form_state['rebuild'] = true;
}
function remove_passenger_form_remove_one($form, &$form_state) {
  if ($form_state['num_names'] > 2) {
    $form_state['num_names']--;
  }
  $form_state['rebuild'] = TRUE;
}
function add_passenger_form_callback($form, $form_state){
    return $form['passenger_fieldset'];    
}
1
tleo