it-swarm-vi.com

Ví dụ cho $ form_state [xây dựng lại]

Ai đó có thể cho tôi một ví dụ về việc xây dựng lại biểu mẫu bằng cách sử dụng $form_state['rebuild'] sau đầu vào của người dùng?

4
Satya

$ form_state ['xây dựng lại]] được sử dụng rộng rãi trong các hình thức nhiều bước. Hãy xem các ví dụ nâng cao hơn trong Ví dụ biểu mẫu trong Dự án ví dụ . Nó được sử dụng trong các biểu mẫu AJAX, như một trường hợp đặc biệt của nhiều bước, vì vậy bạn có thể muốn xem ví dụ AJAX.

5
rfay

Ví dụ sau đây, liệt kê hai trường văn bản để điền tên hành khách. Nếu người dùng muốn thêm một hành khách (thêm một trường văn bản), biểu mẫu phải được xây dựng lại khi nhấp vào nút 'thêm hành khách'. Hi vọng điêu nay co ich.

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