Article

Can we Modify Drupal Status Messages?

Appnovation Blog Default Header

If you've ever wished you had control over Drupal status messages generated by contributed modules and/or ever longed for hook_message_alter, you may be interested in this little Drupal web developer trick for changing these messages. First, add this theming function to your template.php file (the function name "phptemplate_" may be replaced with your theme name):

function phptemplate_status_messages($display = NULL) { $output = ''; foreach (drupal_get_messages($display) as $type => $messages) { if (count($messages) > 1) { $list = ''; $items = ''; foreach ($messages as $message) { modify_message($message); if (!empty($message)) { $items .= '

  • '. $message ."

\n"; } } if (!empty($items)) { $list = "

\n";

$list .= $items;

\n"; } } else { $message = $messages[0]; modify_message($message); $list = $message; } if (!empty($list)) { $output .= "

\n"; $output .= $list; $output .= "

\n"; } } return $output; } Now, all you have to do is to create another function which will be hiding/modifying your status messages. Here is a function with examples of these changes: /** * Modify/hide a message from user: * * @param string $message */ function modify_message(&$message) { //Add here whatever you need to recognize and modify this message: global $user; // Hide these messages: $message = preg_replace('/No posts in this group\./', '', $message); $message = preg_replace('/Fetching data from GeoNames failed.*/', '', $message); //If the administrator has removed _himself_, the message should instead of //"Username_ABC is no longer a group administrator." say: //"You are no longer an administrator for this group. To regain administrator privileges, please contact an administrator for this group." $current_name = $user->name; preg_match('/(.*) is no longer a\.*/', $message, $matches_A); //check if the current user is the same as the user in the message: if ($matches_A[1]) preg_match("/$current_name/", $matches_A[1], $matches_B); if ($matches_B[0]) $message = "You are no longer an administrator for this group. To regain administrator privileges, please contact an administrator for this group."; }

Et, voila.

Get the thinking,
before everyone else.

One considered email a month. New essays, field notes from live engagements, and the occasional strong opinion. No noise.