it-swarm-ja.com

$ Messagesをnode.tpl.phpファイルに出力する

Drupal 7では、デフォルトで$messages変数がpage.tpl.phpに出力されます。

Node.tpl.phpファイル(例:$ node-mycontenttype.tpl.php)で$messagesを印刷する方法はありますか?.

<?php print $messages; ?>または<?php print render($page['messages']); ?>を置くだけでは機能しません。

$ messagesをブロックに出力するためのチュートリアル here がありますが、それを私のnode.tpl.phpファイルに入れたいと思います。

24
big_smile

実際、あなたがしたいことはこれです:

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コアは、theme_process_pageのshow_messagesの値をチェックします。TRUE(デフォルト)の場合、上記のようにtheme( 'status_messages')を呼び出し、メッセージストレージを空にします。後で同じテーマ関数を呼び出すと、空の文字列が返されます。ただし、その変数をFALSEに設定すると、このテーマ関数がprocess_pageで呼び出されなくなり、テンプレートで同じテーマ関数を使用してすべてのメッセージを取得できるようになります私たちの選択の。

31
Freek

page.tpl.phpの$ messagesとは別にブロックからのメッセージを表示する方法 での答えは、質問で参照したものに進むのに良い方法です。基本的に、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に$ messagesを出力できるはずです。

8