Trên thực tế, những gì bạn muốn làm là đây:
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');
}
Cách thức hoạt động: Lõi Drupal kiểm tra giá trị của show_messages trong theme_ process_page. Nếu đó là TRUE (mặc định) thì nó gọi chủ đề ('status_messages') như trên và làm trống hiệu quả bộ lưu trữ thư, do đó, việc gọi cùng chức năng chủ đề sẽ chỉ trả về một chuỗi trống. Tuy nhiên, nếu chúng ta đặt biến đó thành FALSE, điều này sẽ ngăn chức năng chủ đề đã nói được gọi trong process_page, cho phép chúng ta nhận được tất cả các tin nhắn bằng cùng một chức năng chủ đề, trong một mẫu mà chúng ta chọn.
template_preprocess_node
nên drupal_get_messages trống khi bạn gọi nó.