php ड्रपल मल्टी फॉर्म पृष्ठ रिफ्रेश पर खो देता है



forms drupal (1)

यदि आप $ form_state ['rebuild'] = _submit फ़ंक्शन में उपयोग करते हैं तो फॉर्म की स्थिति सहेज ली जाती है और इसे डिफ़ॉल्ट मानों के लिए इस्तेमाल किया जा सकता है।

इस उदाहरण की जांच करें: http://www.ferolen.com/blog/how-to-create-multistep-form-in-drupal-6-tutorial/

मेरे पास एक मल्टी-पेज फ़ॉर्म है पृष्ठ 1, पेज 2 और उसके बाद पृष्ठ पर जाएं 3. पुश रीफ्रेश करें (एफ 5) और फ़ॉर्म पृष्ठ 2 पर वापस जाता है।

यह ड्रूपल -6 के साथ है समस्या http://drupal.org/node/1060290 जैसा दिखती है

Form_cache डेटाबेस तालिका के माध्यम से, समस्या में खोदना। दोनों पृष्ठ 1 और 2 डेटा वहां दिखाई देते हैं PHP डीबगर में ऐसा लगता है कि एक नया form_id बनाया गया है। अर्थात। भंडारण_फॉर्म-1add3819cbea88139679819935a69686 डेटाबेस कैश तालिका में कुंजी है और फॉर्म-बीसीएफ 9 556f57f5352a57dfbba4c2120ee7 ताज़ा करने पर 'form_id' है

मेरा फॉर्म कोड कैसा दिखता है?

मुख्य रूप फ़ंक्शन:

function myform_online(&$form_state) {
  // $form_state['storage']['step'] keeps track of what page we're on.
  // start at step 1 if no storage has been set
  if (!isset($form_state['storage']['step'])) {
    $form_state['storage']['step'] = 1;
 }

 // If we are saving the form data we should submit rather than display the details.
 // At least look at saving the step.

 // Don't lose our old data when returning to a page with data already typed in.
 $default_values = array();
 if (isset($form_state['storage']['values'][$form_state['storage']['step']])) {
    $default_values = $form_state['storage']['values'][$form_state['storage']['step']];
 }

 switch ($form_state['storage']['step']) {
    case 1:
        // Your Details
        module_load_include('inc', 'join_online', 'includes/step1'); 

और हम संभाल लेंगे:

function join_online_submit($form, &$form_state) {
//Save the values for the current step into the storage array.
//dsm($form_state); 

$form_state['storage']['values'][$form_state['storage']['step']] = $form_state['values'];

# ahah - bail.
if ($form_state['ahah_submission']) {
    return;
}

// How do we work out if this was a refresh? It currently does start with 1 and think that the step is #2. 

//Check the button that was clicked and change the step.
if ($form_state['clicked_button']['#id'] == 'edit-previous') {
    $form_state['storage']['step']--;
} elseif ($form_state['clicked_button']['#id'] == 'edit-next') {
    $form_state['storage']['step']++;
} elseif ($form_state['clicked_button']['#id'] == 'edit-finish') {
    //You should store the values from the form in the database here.
    //We must do this or the form will rebuild instead of refreshing.
    unset($form_state['storage']);

    //Go to this page after completing the form.
    $form_state['redirect'] = 'join_online/form/thank-you';
}
}




drupal-6