Stampa $ Messaggi nel file node.tpl.php


23

In Drupal 7, per impostazione predefinita la $messagesvariabile è stampata in page.tpl.php.

C'è un modo per stampare $messagesin un file node.tpl.php (ad esempio $ node-mycontenttype.tpl.php).

Mettere <?php print $messages; ?>o <?php print render($page['messages']); ?>non funziona.

C'è un tutorial qui per stampare $ messaggi in un blocco, ma vorrei metterlo nel mio file node.tpl.php.


Penso che theme_status_messages sia stato chiamato prima, template_preprocess_nodequindi drupal_get_messages è vuoto quando lo chiami.
sviluppatore anonimo il

Risposte:


30

In realtà, quello che vuoi fare è questo:

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

Come funziona: il core Drupal controlla il valore di show_messages in theme_process_page. Se è TRUE (impostazione predefinita), chiama il tema ('status_messages') come sopra e svuota efficacemente l'archiviazione dei messaggi, quindi chiamare la stessa funzione tema in seguito restituirà solo una stringa vuota. Tuttavia, se impostiamo quella variabile su FALSE, ciò impedisce che detta funzione tema venga richiamata in process_page, permettendoci di ottenere tutti i messaggi usando la stessa funzione tema, in un modello di nostra scelta.


1
E se vuoi solo che questo compia un'azione sulle pagine dei nodi, devi semplicemente avvolgere $ variabili ['show_message'] = FALSE con un condizionale per vedere se (isset ($ variabili ['nodo'])).
Areynolds,

E devi fare lo stesso per tutte le altre pagine (visualizzazioni, pannelli, ecc.)
Maria Ioannidou,

8

La risposta in Come visualizzare i messaggi da un blocco separatamente da $ message in page.tpl.php a cui hai fatto riferimento nella tua domanda è un ottimo modo di procedere. Fondamentalmente hai bisogno di qualcosa del genere in cui YOURTHEME è il nome del tuo tema e questa funzione dovrebbe essere nel tuo template.php. In realtà non ho eseguito questo codice, ma ho una crepa.

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

Dovresti quindi essere in grado di generare $ messaggi nel tuo node.tpl.php


Grazie per la soluzione L'ho provato ma non sembra funzionare. Sto usando quanto segue per stampare $ $: <? Php print $ messaggi; ?> È corretto?
big_smile,

8
Fai attenzione quando togli le cose da page.tpl.php. Il modello di nodo non viene utilizzato per ogni pagina, quindi potrebbero mancare i messaggi che vengono visualizzati su pagine non nodo (come le pagine di amministrazione, ad esempio). Quando lo farai, ti consiglio di mantenere un fallback in page.tpl.php che mostrerà i tuoi messaggi quando non sono ancora intercettati da node.tpl.php.
marcvangend,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.