Node.tpl.php फ़ाइल में $ संदेश प्रिंट करें


23

Drupal 7 में, डिफ़ॉल्ट रूप से $messagesवेरिएबल पेज.tpl.php में छपा होता है।

क्या कोई $messagesनोड में प्रिंट करने का एक तरीका है। .NET.php फ़ाइल (जैसे $ नोड-mycontenttype.tpl.php)।

सिर्फ लगाना <?php print $messages; ?>या <?php print render($page['messages']); ?>काम नहीं करना।

एक ब्लॉक में $ संदेशों को प्रिंट करने के लिए यहां एक ट्यूटोरियल है , लेकिन मैं इसे अपने नोड.प्ले.फैप फ़ाइल में रखना चाहूंगा।


मुझे लगता है कि theme_status_messages को इससे पहले बुलाया जा रहा है template_preprocess_nodeताकि आप इसे कॉल करते समय drupal_get_messages खाली हों।
बेनामी-डेवलपर

जवाबों:


30

वास्तव में, आप यह करना चाहते हैं:

function YOURTHEME_preprocess_page(&$variables) {
  // This disables message-printing on ALL page displays
  $variables['show_messages'] = FALSE;
}

function YOURTHEME_preprocess_node(&$variables) {
  $variables['messages'] = theme('status_messages');
}

यह कैसे काम करता है: Drupal core theme_process_page में show_messages के मान की जाँच करता है। यदि यह TRUE (डिफ़ॉल्ट) है, तो यह ऊपर के रूप में थीम ('status_messages') को कॉल करता है, और संदेशों के संग्रहण को प्रभावी ढंग से खाली करता है, इसलिए बाद में समान थीम फ़ंक्शन को कॉल करने से खाली स्ट्रिंग वापस आ जाएगी। हालाँकि, अगर हम उस वैरिएबल को FALSE पर सेट करते हैं, तो यह उक्त थीम फ़ंक्शन को प्रोसेस_पेज में आने से रोकता है, जिससे हम अपने चयन के टेम्प्लेट में समान थीम फ़ंक्शन का उपयोग करके सभी संदेशों को प्राप्त कर सकते हैं।


1
और यदि आप केवल यही चाहते हैं कि नोड पेजों पर कार्रवाई हो, तो बस $ चर ['show_message'] = FALSE को एक सशर्त के साथ देखें कि क्या (isset ($ चर ['नोड'))।
13:13

और आपको अन्य सभी पृष्ठों (विचारों, पैनलों, आदि) के लिए भी ऐसा ही करना है
मारिया इयानानिदो

8

Page.tpl.php में $ संदेश से अलग से एक ब्लॉक से संदेशों को प्रदर्शित करने के तरीके का उत्तर जिसे आपने अपने प्रश्न में संदर्भित किया है, जाने का एक अच्छा तरीका है। अनिवार्य रूप से आपको कुछ इस तरह की आवश्यकता होती है जहां आपका विषय आपके विषय का नाम है और यह फ़ंक्शन आपके टेम्पलेट में होना चाहिए। मैंने वास्तव में इस कोड को नहीं चलाया है लेकिन इसमें दरार है।

function YOURTHEME_preprocess_node(&$vars) {
  $output = '';
  foreach (drupal_get_messages(NULL, FALSE) as $type => $messages) {
    $output .= "<div class=\"messages $type\">\n";
    if (count($messages) > 1) {
      $output .= " <ul>\n";
      foreach ($messages as $message) {
        $output .= '  <li>' . $message . "</li>\n";
      }
      $output .= " </ul>\n";
    }
    else {
      $output .= $messages[0];
    }
    $output .= "</div>\n";
  }

  $vars['messages'] = $output;
}

फिर आपको अपने नोड में $ मेसेजेस आउटपुट करने में सक्षम होना चाहिए


समाधान के लिए धन्यवाद। मैंने कोशिश की है, लेकिन यह काम नहीं कर रहा है। मैं $ संदेशों को प्रिंट करने के लिए निम्नलिखित का उपयोग कर रहा हूं: <; php प्रिंट $ संदेश; ?> क्या यह सही है?
big_smile

8
Page.tpl.php से सामान निकालते समय सावधान रहें। नोड टेम्प्लेट का उपयोग प्रत्येक पृष्ठ के लिए नहीं किया जाता है, इसलिए आपको ऐसे संदेश गुम हो सकते हैं जो गैर-नोड पृष्ठ (उदाहरण के लिए, व्यवस्थापक पृष्ठ जैसे) प्रदर्शित होते हैं। जब आप ऐसा करने जा रहे हों, तो मेरा सुझाव है कि आप page.tpl.php में एक फॉलबैक रखें, जो आपके संदेशों को तब दिखाएंगे जब वे अभी तक nt.tpl.php द्वारा इंटरसेप्ट नहीं होते हैं।
marcvangend
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.