it-swarm.com.de

Drucken Sie $ Messages in der Datei node.tpl.php

In Drupal 7) wird standardmäßig die Variable $messages In page.tpl.php gedruckt.

Gibt es eine Möglichkeit, $messages In einer Datei node.tpl.php zu drucken (z. B. $ node-mycontenttype.tpl.php).

Nur <?php print $messages; ?> Oder <?php print render($page['messages']); ?> zu setzen, funktioniert nicht.

Es gibt ein Tutorial hier zum Drucken von $ -Nachrichten in einem Block, aber ich möchte es in meine Datei node.tpl.php einfügen.

24
big_smile

Eigentlich möchten Sie Folgendes tun:

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');
}

So funktioniert das: Drupal core überprüft den Wert von show_messages in theme_process_page. Wenn es TRUE (Standard) ist, ruft es wie oben das Thema ('status_messages') auf und leert den Nachrichtenspeicher effektiv Wenn Sie später dieselbe Themenfunktion aufrufen, wird nur eine leere Zeichenfolge zurückgegeben. Wenn Sie diese Variable jedoch auf FALSE setzen, wird verhindert, dass diese Themenfunktion in process_page aufgerufen wird, sodass wir alle Nachrichten mit derselben Themenfunktion in einer Vorlage abrufen können unserer Wahl.

31
Freek

Die Antwort in Anzeigen von Nachrichten aus einem Block getrennt von $ messages in page.tpl.php , auf die Sie in Ihrer Frage verwiesen haben, ist ein guter Weg. Im Wesentlichen benötigen Sie so etwas, wobei YOURTHEME der Name Ihres Themas ist und diese Funktion in Ihrer template.php enthalten sein sollte. Ich habe diesen Code nicht ausgeführt, habe aber einen Riss.

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;
}

Sie sollten dann in der Lage sein, $ messages in Ihrer node.tpl.php auszugeben

8