it-swarm.asia

مثال على $ form_state ["rebuild"]

نرجو من أحد أن يعطيني مثالاً على إعادة بناء النموذج باستخدام $form_state['rebuild'] بعد إدخال المستخدم؟

4
Satya

يتم استخدام $ form_state ["rebuild"] على نطاق واسع في أشكال متعددة الخطوات. ألق نظرة على الأمثلة الأكثر تقدمًا في مثال النموذج في مشروع الأمثلة . يتم استخدامه في AJAX النماذج ، كحالة خاصة من متعدد الخطوات ، لذلك قد ترغب في إلقاء نظرة على AJAX المثال.

5
rfay

يسرد المثال التالي حقلي نص لملء أسماء الركاب. إذا أراد المستخدم إضافة راكب واحد آخر (حقل نصي آخر) ، فيجب إعادة إنشاء النموذج عند النقر فوق الزر "إضافة راكب". أتمنى أن يساعدك هذا.

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