আমার $ বার্তাগুলি কেন এক পৃষ্ঠার রিফ্রেশটি বিলম্ব করছে?


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. আমি "নতুন অ্যাকাউন্ট তৈরি করুন" ক্লিক করুন।
  3. পৃষ্ঠাটি জমা দেওয়া এবং পুনরায় লোড করা মনে হচ্ছে, তবে কিছুই ঘটেনি - কোনও ত্রুটি বার্তা প্রদর্শিত হচ্ছে না
  4. আমি পৃষ্ঠাটি রিফ্রেশ করছি (F5)
  5. ফায়ারফক্স প্রদর্শন করে "এই পৃষ্ঠাটি প্রদর্শন করার জন্য, ফায়ারফক্স অবশ্যই এমন তথ্য প্রেরণ করবে যা পূর্বে যে কোনও ক্রিয়াকলাপ পুনরাবৃত্তি করবে" - সুতরাং আমি জানি যে আমার পোস্টটি আগে গিয়েছিল।
  6. আমি সেই সংলাপ উইন্ডোতে "পুনরায় পাঠাতে" ক্লিক করি।
  7. আমার ত্রুটি বার্তাগুলি উপস্থিত হয় - "ই-মেইল ঠিকানা ক্ষেত্র প্রয়োজন", "নাম প্রশাসক ইতিমধ্যে নেওয়া হয়েছে"।

এটি কেবলমাত্র নিবন্ধকরণ ফর্ম নয়, এখন পর্যন্ত পরীক্ষিত সমস্ত ফর্মগুলির জন্য এটি ঘটে ।

ইহা কি জন্য ঘটিতেছে? এটিকে ঠিক করার জন্য আমি কী করতে পারি যাতে ত্রুটি বার্তাগুলি প্রথমবার প্রদর্শিত হয়?

এটিকে ডিবাগ করার জন্য যা প্রয়োজন তা করতে পেরে আমি খুশি, তবে সন্ধানের জন্য আমার কিছু দিকনির্দেশ দরকার :) :)

উত্তর:


4

সম্ভবত সমস্যাটি হ'ল আপনি যখন ফর্মটি কল করছেন তখনই যখন বার্তাগুলি তৈরি হয়ে গেছে, যার কারণে সেগুলি উপস্থিত হয় না। পৃষ্ঠার তৈরির প্রক্রিয়াটির আগে আপনাকে ফর্মটি কল করতে হবে বা drupal_get_messages সহ বার্তাগুলি পাওয়া উচিত।

আপনার সত্যিই যা করা উচিত তা হ'ল আপনার থিমটিতে এটি করার পরিবর্তে মডিউলটিতে এই কার্যকারিতা তৈরি করুন এবং পৃষ্ঠাকে থিম করুন। আপনি সম্ভবত এর মতো আরও অনেক সমস্যার মধ্যে দৌড়াতে পারেন।


ঠিক আছে, আমি মনে করি অবশেষে আমি এটি ঠিক করে ফেলেছি। আমি 'মাই_গ্রিস্টার_ফর্ম' নামে একটি মডিউল লিখেছি যা এর 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

আমিও এই সমস্যায় ভুগলাম। @ গুগলটারপ এর উত্তর আমাকে সমাধান করতে সহায়তা করেছে।

পৃষ্ঠার শুরুতে টিপিএল। ফর্মগুলির রেন্ডারযুক্ত সামগ্রী পান যেমন আমার মামলার জন্য:

$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);

তারপরে বার্তা প্রিন্ট বিভাগে, পৃষ্ঠা টিপিএল-তে 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 ?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.