ニュースレターの購読フォームとして機能するWebフォームがあります。メールのテキストフィールドとボタンが表示されます。ボタンをクリックすると、通常は他のメッセージが表示されるページの上部に通知メッセージが表示されます。
ただし、ウェブフォームはブロックであり、サイドバーに表示されるため、メッセージがページの上部中央ではなく、ブロックの真上に表示されていれば、より使いやすくなります。これは実装可能ですか?
一般化すると、統一された$messages
変数の代わりに、ページの異なるセクションにある異なるブロック/モジュールからのメッセージを表示することは可能ですか?
通知が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変数を出力します。