Как отображать сообщения из блока отдельно от $сообщений в page.tpl.php
У меня есть веб-форма, которая работает как форма подписки на рассылку новостей: в ней отображается текстовое поле для электронного письма и кнопка. При нажатии на кнопку в верхней части страницы, где обычно отображаются любые другие сообщения, отображается уведомление.
Однако, поскольку веб-форма представляет собой блок и отображается на боковой панели, было бы удобнее, если бы сообщение отображалось прямо над блоком, где в настоящее время находится фокус посетителя, а не вверху посередине страница. Возможно ли это реализовать?
Для обобщения: возможно ли отображать сообщения из разных блоков/модулей в разных разделах страницы вместо единой переменной $messages
?
1 answers
Если уведомление устанавливается в переменной $messages, используемой в page.tpl.php вы можете эмулировать theme_status_messages(), добавив это в свою тему template.php файл
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.