Как отображать сообщения из блока отдельно от $сообщений в page.tpl.php


У меня есть веб-форма, которая работает как форма подписки на рассылку новостей: в ней отображается текстовое поле для электронного письма и кнопка. При нажатии на кнопку в верхней части страницы, где обычно отображаются любые другие сообщения, отображается уведомление.

Однако, поскольку веб-форма представляет собой блок и отображается на боковой панели, было бы удобнее, если бы сообщение отображалось прямо над блоком, где в настоящее время находится фокус посетителя, а не вверху посередине страница. Возможно ли это реализовать?

Для обобщения: возможно ли отображать сообщения из разных блоков/модулей в разных разделах страницы вместо единой переменной $messages?

Author: ulmas, 2011-05-29

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.

 3
Author: hitfactory, 2011-07-05 23:01:27