web-dev-qa-db-ja.com

ブロックからのメッセージをpage.tpl.phpの$ messagesとは別に表示する方法

ニュースレターの購読フォームとして機能するWebフォームがあります。メールのテキストフィールドとボタンが表示されます。ボタンをクリックすると、通常は他のメッセージが表示されるページの上部に通知メッセージが表示されます。

ただし、ウェブフォームはブロックであり、サイドバーに表示されるため、メッセージがページの上部中央ではなく、ブロックの真上に表示されていれば、より使いやすくなります。これは実装可能ですか?

一般化すると、統一された$messages変数の代わりに、ページの異なるセクションにある異なるブロック/モジュールからのメッセージを表示することは可能ですか?

4
ulmas

通知がpage.tpl.phpで使用される$ messages変数に設定されている場合、これをテーマのtemplate.phpファイルに追加することにより、theme_status_messages()をエミュレートできます。

function YOURTHEME_preprocess_block(&$vars) {

  $block = $vars['block'];

  if ($block->module == 'MODULENAME' && $block->delta == 'DELTA') {
  $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;
  }
}

次に、ブロックのみのテンプレートファイル(block-MODULENAME-DELTA.tpl.phpなど)で、$ messages変数を出力します。

3
hitfactory