ड्रुपल फॉर्म सबमिट करने के बाद मैं परिणाम कैसे प्रिंट करूं?


9

मेरे पास एक सरल Drupal मॉड्यूल सेटअप है जिसमें एक एकल टेक्स्टबॉक्स है।

मैं पाठ बॉक्स में टाइप किए गए का उपयोग करके वापस आ सकता हूं drupal_set_message():

function firstmodule_form1_submit($form, &$form_state) {
    drupal_set_message(t("The user is $username"));
}

हालांकि echo $username;मेरे लिए काम नहीं करेगा, कुछ भी नहीं छपा है। मैं बिना उपयोग किए परिणाम कैसे लौटा सकता हूं drupal_set_message()?

जवाबों:


7

इसे संभालने का सामान्य तरीका बहु-चरण वर्कफ़्लो को लागू करना है। drupal_rebuild_form()अधिक जानकारी के लिए देखें , लेकिन मूल रूप से आप $form_state['rebuild'] = TRUE;अपने सबमिट हैंडलर में सेट करते हैं, और मूल रूप फ़ंक्शन में यह देखने के लिए एक चेक जोड़ते हैं कि क्या फॉर्म सबमिट किया गया है। यदि यह है, तो आपके पास सबमिट किए गए मानों तक पहुंच है और जैसा कि आप फिट देखते हैं, फॉर्म में हेरफेर कर सकते हैं।

एक बहुत ही बुनियादी उदाहरण:

function MYMODULE_some_form($form, &$form_state) {
  // If the form has been submitted, output something related to the submission
  if (!empty($form_state['values']['some_field'])) {
    $form['submission'] = array(
      '#markup' => function_to_get_markup_from_value($form_state['values']['some_field'])
    );
  }
  else {
    // Otherwise build the normal form
    $form['some_field'] = array(
      '#type' => 'textfield',
      // ...
    );
  }

  return $form;
}

function MYMODULE_some_form_submit($form, &$form_state) {
  $form_state['rebuild'] = TRUE;
}

2

एक फॉर्म सबमिशन हैंडलर केवल एक संदेश का उपयोग करके प्रिंट कर सकता है drupal_set_message(), या लॉग में संदेश लिख सकता है watchdog()

विकल्प सत्र में आवश्यक डेटा को सहेज रहा है, और उपयोगकर्ता को ( $form_state['redirect'] = 'page path';पेज का उपयोग करके ) उस पृष्ठ पर पुनर्निर्देशित करता है जहां सत्र की सामग्री दिखाई जाती है।

function firstmodule_menu() {
  $items['the path for your page'] = array(
    'page callback' => 'firstmodule_show_submitted_data';
    // ...
  );

  return $items;
}

function firstmodule_form1_submit($form, &$form_state) {
  $_SESSION['firstmodule_username'] = $username;
  // ...

  $form_state['redirect'] = 'the path for your page';
}

function firstmodule_show_submitted_data() {
  // Populate $result with the string to show.

  return $result;
}

साइड नोट के रूप में, पहली दलील में t()शाब्दिक स्ट्रिंग होना चाहिए, न कि एक स्ट्रिंग जिसे प्राप्त करने के लिए दो तार हों, जैसा कि आपके मामले में है। आपको निम्न कोड में प्लेसहोल्डर्स का उपयोग करना चाहिए।

drupal_set_message(t("The user is %username", array('%username' => $username)));

Drupal 7 में, एक स्ट्रिंग वापस करने के बजाय, आप एक रेंडर सरणी वापस कर सकते हैं ।


1

सभी जमा किए गए डेटा $form_state, यदि आप देखना चाहते हैं कि क्या होता है तो डेवेल मॉड्यूल स्थापित होता है और आपके द्वारा हमेशा ऐसा करने के बाद:

firstmodule_form1_submitसभी प्रकार $form_stateप्रकार मुद्रित करने के लिए अपने फ़ंक्शन के अंदर - dpm($form_state)- और आप आउटपुट देखेंगे, जहां यू आपके टेक्स्टबॉक्स उपयोगकर्ता नाम या किसी अन्य को ढूंढ सकते हैं, यह कुछ इसी तरह होगा$form_state['values']['username']

और फिर आप इसे प्रिंट कर सकते हैं drupal_set_message(t($form_state['values']['username']);


धन्यवाद, मेरे पास वह हिस्सा है हालांकि drupal_set_message इसे "सहायता संदेश" प्रकार की चीज़ के रूप में देता है। मैं पेज पर बहुत सारी सामग्री वापस करना चाहता हूं।
h00j

0

आपको मेनू कॉलबैक करने की आवश्यकता है, मूल रूप से वह पृष्ठ होगा जिसे आपने सेट किया था और जानकारी प्रदर्शित करेगा।

अधिक जानकारी यहां उपलब्ध है: http://api.drupal.org/api/drupal/includes -menu.inc/group/menu/7 और आपको हुक_मेनू () के बारे में और अधिक पढ़ने की आवश्यकता है

आशा है कि मदद करता है, मुझे बताओ अगर तुम एक उदाहरण की जरूरत है।

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