मेरे $ संदेशों को एक पृष्ठ ताज़ा करने में देरी क्यों हो रही है?


10

मेरे पास बहुत ही सरल टेम्पलेट वाला एक पेज है:

<!DOCTYPE html>
<html>
<head><title>TEST REGISTRATION PAGE</title></head>
<body>
    <?php 
        print drupal_get_form('user_register');
        print $messages;
        print $closure;
        print $main_content;
    ?>
</body></html>

असल में, यह पंजीकरण फॉर्म प्रदर्शित करता है और कुछ नहीं।

  1. मैं फ़ॉर्म पर कुछ खराब डेटा दर्ज करता हूं - पहले से ही उपयोग किया गया उपयोगकर्ता नाम (व्यवस्थापक), और कोई ईमेल पता नहीं।
  2. मैं "create new account" पर क्लिक करता हूँ।
  3. पृष्ठ सबमिट करना और पुनः लोड करना प्रतीत होता है, लेकिन कुछ भी नहीं हुआ है - कोई त्रुटि संदेश प्रदर्शित नहीं हो रहा है
  4. मैं पृष्ठ (F5) को ताज़ा करता हूं।
  5. फ़ायरफ़ॉक्स "इस पृष्ठ को प्रदर्शित करने के लिए, फ़ायरफ़ॉक्स को ऐसी जानकारी भेजनी चाहिए जो पहले की गई किसी भी कार्रवाई को दोहराएगी" - इसलिए मुझे पता है कि मेरा POST पहले चला गया था।
  6. मैं उस डायलॉग विंडो में "resend" पर क्लिक करता हूं।
  7. मेरे त्रुटि संदेश दिखाई देते हैं - "ई-मेल पता फ़ील्ड आवश्यक है", "नाम व्यवस्थापक पहले से ही लिया गया है"।

यह उन सभी रूपों के लिए होता है जिन्हें मैंने अब तक परीक्षण किया है, न कि केवल पंजीकरण फॉर्म के लिए।

ये क्यों हो रहा है? मैं इसे ठीक करने के लिए क्या कर सकता हूं ताकि पहली बार त्रुटि संदेश प्रदर्शित हो?

मुझे इस पर डिबग करने के लिए जो भी करने की आवश्यकता है, मुझे खुशी है, लेकिन मुझे अंदर देखने के लिए कुछ दिशा की आवश्यकता है। :)

जवाबों:


4

सबसे अधिक समस्या यह है कि आप उस फॉर्म को कॉल कर रहे हैं जब संदेश पहले से ही बनाए गए हैं, यही कारण है कि वे दिखाई नहीं देते हैं। आपको फॉर्म को कॉल करने की आवश्यकता है, पहले पृष्ठ के निर्माण की प्रक्रिया में या संदेश प्राप्त करने के लिए, drupal_get_messages के साथ।

आपको वास्तव में क्या करना चाहिए, इस कार्यक्षमता को एक मॉड्यूल में बनाना और पृष्ठ को थीम के बजाय अपने विषय में ऐसा करना है। आप संभावित रूप से इस तरह की कई और समस्याओं में भाग सकते हैं।


ठीक है, मुझे लगता है कि मैंने आखिरकार यह तय कर दिया होगा। मैंने 'my_register_form' नामक एक मॉड्यूल लिखा है, जो कुछ भी नहीं करता है, लेकिन इसमें वापस आता drupal_get_form('user_register')है $block['content']। मैं संदर्भ के माध्यम से उस मॉड्यूल को शामिल करता हूं और फिर पंजीकरण त्रुटि संदेश प्रस्तुत करने के बाद सही ढंग से दिखाता है। यह अत्यधिक जटिल लगता है, लेकिन यह काम करता है और यह मुझे लॉगिन / रजिस्टर फॉर्म शामिल करता है कि मैं उन्हें कैसे चाहता हूं। आपकी मदद के लिए धन्यवाद ढेर।
जॉर्ज

3

हमने फ़ॉर्म सत्यापन समस्या को हल कर दिया है, (संदेश के प्रस्तुत होने के बाद हो रहा फॉर्म सत्यापन, और अगले अनुरोध पर दिखा रहा है), बाय ..

फॉर्म सत्यापन को हुक_नोड_व्यू में मजबूर करना

/**
 * This is a fix for a bug where the validation error messages lag a 
 * full request behind form submissions
 */
function your_module_node_view($node, $view_mode){
  // check that form id is the form you want
  if ( !isset( $_POST['form_id'] ) || $_POST['form_id'] != 'your_form_id' ){
    return;
  }
  // this forces validation of the form 
  drupal_get_form('your_form_id');
}

2

मैं भी इस समस्या से ग्रस्त था। @ googletorp के उत्तर ने मुझे इसे हल करने में मदद की।

पेज tpl की शुरुआत में। मेरे मामले के लिए प्रपत्रों की प्रदान की गई सामग्री प्राप्त करें:

$register_form = drupal_get_form('user_register_form');
$register_form_content = render($register_form);

$form_user_pass = drupal_get_form('user_pass');
$form_user_pass_content = drupal_render($form_user_pass);

$login_form = drupal_get_form('user_login_block');
$login_form_content = render($login_form);

फिर संदेश प्रिंट सेक्शन में, पेज tpl पर drupal_get_messages () कॉलिंग संदेश प्राप्त करें। $ संदेश अभी भी एक और पृष्ठ ताज़ा किए बिना संदेशों को लाने में असमर्थ हैं।

<?php 
    $messages = drupal_get_messages('error');
    if(is_array($messages['error']) && count($messages['error'])) {
?>
    <div id="messages">
        <div class="section clearfix">
            <div class="messages error">
                <ul>
                    <?php 
                    foreach($messages['error'] as $item) {
                        echo '<li>'.$item.'</li>';
                    }
                    ?>
                </ul>
            </div>
        </div>
    </div>
<?php
    }
?>

फिर प्रदान किए गए फ़ॉर्म सामग्री को उचित अनुभाग पर प्रिंट करें और इसे हल किया :)।


1

सीधे तौर पर पूछे गए सवाल का हल नहीं है, लेकिन जब मैं एक ही समस्या आ रही थी तो मैं इस पर आया:

यदि आपके फॉर्म ब्लॉक को सीधे tpl.php फ़ाइल (शायद लेआउट कारणों से) से कॉल किया जाता है, तो आपको विलंबित संदेश मिलेंगे।

यानी मैं अपनी टेम्पलेट फ़ाइल में निम्नलिखित कोड के साथ एक ब्लॉक लोड कर रहा था:

$vars['contact_details'] = module_invoke('viewusercontact', 'block_view', 0);

और फिर इसे मेरे tpl.php फ़ाइल में रेंडर करना।

<?php print render $contact_details ?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.