it-swarm.dev

page.tpl.php에서 $ messages와 별도로 블록의 메시지를 표시하는 방법

뉴스 레터 구독 양식으로 작동하는 웹 양식이 있습니다. 전자 메일의 텍스트 필드와 버튼이 표시됩니다. 버튼을 클릭하면 일반적으로 다른 메시지가 표시되는 페이지 위에 알림 메시지가 표시됩니다.

그러나 웹 양식은 블록이고 사이드 바에 표시되므로 페이지 상단 중간 대신 방문자의 현재 초점이있는 블록 바로 위에 메시지가 표시되는 경우 더 유용합니다. 이것을 구현할 수 있습니까?

일반화 : 통합 된 $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