Друк $ повідомлень в node.tpl.php файлу


23

У Drupal 7 за замовчуванням $messagesзмінна друкується у page.tpl.php.

Чи є спосіб друкувати $messagesу файлі node.tpl.php (наприклад, $ node-mycontenttype.tpl.php).

Просто ставити <?php print $messages; ?>чи <?php print render($page['messages']); ?>не виходить.

Там в підручнику тут для друку $ повідомлень в блоці, але я хотів би, щоб покласти його в свій файл node.tpl.php.


Я думаю, що тему_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 ядро ​​перевіряє значення show_messages в theme_process_page. Якщо це TRUE (за замовчуванням), він викликає тему ('status_messages'), як зазначено вище, і ефективно спорожняє сховище повідомлень, тому виклик тієї ж функції теми пізніше поверне порожню рядок. Проте, якщо ми встановлюємо цю змінну в FALSE, це запобігає сказав тема функція від виклику в process_page, що дозволяє нам отримувати всі повідомлення, використовуючи ту ж саму функцію, тему, в шаблоні нашого вибору.


1
І якщо ви хочете, щоб це вчинило дії на сторінках вузлів, просто оберніть $ змінних ['show_message'] = FALSE з умовними умовами, щоб побачити if (isset ($ variables ['node'])).
areynolds

І ви повинні зробити те ж саме для всіх інших сторінок (перегляди, панелі тощо)
Maria Ioannidou

8

Відповідь на Як відображати повідомлення з блоку окремо від $ повідомлень в page.tpl.php якого посилається у своєму запитанні є прекрасним способом піти. За суті , ви повинні що - щось подібне , де YOURTHEME це назва вашої теми , і ця функція повинна бути у вашому template.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;
}

Тоді ви зможете виводити $ повідомлення у свій node.tpl.php


Дякую за рішення. Я пробував, але це не схоже на роботу. Я використовую наступне для друку $ повідомлень: <? Php print $ messages; ?> Це правильно?
big_smile

8
Будьте обережні, виймаючи речі з page.tpl.php. Шаблон вузла не використовуються для кожної сторінки, так що ви можете бути , що листи , які будуть відображатися на НЕ-вузлових сторінках (наприклад , адміністратори сторінок, наприклад). Коли ви збираєтесь це робити, рекомендую зберігати відсилку в page.tpl.php, яка відображатиме ваші повідомлення, коли їх ще не перехопило node.tpl.php.
marcvangend
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.