답변:
실제로, 당신이하고 싶은 것은 이것입니다 :
function YOURTHEME_preprocess_page(&$variables) {
// This disables message-printing on ALL page displays
$variables['show_messages'] = FALSE;
}
function YOURTHEME_preprocess_node(&$variables) {
$variables['messages'] = theme('status_messages');
}
작동 방식 : Drupal 코어는 theme_process_page에서 show_messages의 값을 확인합니다. TRUE (기본값) 인 경우 위와 같이 theme ( 'status_messages')를 호출하고 효과적으로 메시지 스토리지를 비우므로 나중에 동일한 테마 함수를 호출하면 빈 문자열이 리턴됩니다. 그러나 해당 변수를 FALSE로 설정하면 process_page에서 테마 기능이 호출되는 것을 방지하여 선택한 템플릿에서 동일한 테마 기능을 사용하여 모든 메시지를 가져올 수 있습니다.
질문에서 참조 한 page.tpl.php의 $ messages와 별도로 블록의 메시지를 표시하는 방법 에 대한 답변은 좋은 방법입니다. 본질적으로 YOURTHEME이 테마의 이름 이며이 기능은 template.php에 있어야합니다. 실제로이 코드를 실행하지는 않았지만 균열이 있습니다.
function YOURTHEME_preprocess_node(&$vars) {
$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;
}
그런 다음 node에서 $ messages를 출력 할 수 있어야합니다.
template_preprocess_node
drupal_get_messages가 비어있을 때 호출합니다.