Método rápido y sucio de quitar mensajes generados por Drupal

27 September 2010 – 14:00

Drupal genera e imprime por pantalla mensajes de información para el usuario, que a veces están muy bien pero otras veces solamente incordian.

Por defecto en Drupal 6 no hay ningún mecanismo (ni hook ni nada) para poder eliminar selectivamente algunos mensajes concretos, así que, si no quieres hackear core aquí te presentamos la manera rápida y sucia de hacerlo.

Solo tienes que copiar la siguiente función al template.php del theme que estés usando y cambiar el valor de la variable $string_to_remove a lo que quieras.

function phptemplate_status_messages($display = NULL) {
  $output = '';
  $string_to_remove = 'El abuelo fue picador';
  foreach (drupal_get_messages($display) as $type => $messages) {
    $output .= "<div class=\"messages $type\">\n";
    if (count($messages) > 1) {
      $output .= " <ul>\n";
      foreach ($messages as $message) {
        if (strpos($message, $string_to_remove) === false) {
          $output .= '  <li>'. $message ."</li>\n";
        }
      }
      $output .= " </ul>\n";
    }
    else {
      if (strpos($messages[0], $string_to_remove) === false) {
        $output .= $messages[0];
      } else {
        $remove_output = true;
      }
    }
    $output .= "</div>\n";
  }
  return ($remove_output ? '' : $output);
}

Nota 1: hay un módulo llamado messages alter que facilita un hook para modificar los messages, pero en esencia hace lo mismo, buscar cadenas :-(
Nota 2: esta guarrada no será necesaria en Drupal 7, ya que por fin facilitan un hook para modificar messages :-)

UPDATE: gracias a morgothz por encontrar un bug, ya está solucionado :-D


Publicado originalmente en mi antiguo blog, 3oheme.com, y recuperado de archive.org.

This is the personal website of Ignacio Palomo Duarte, Product Manager. If you're looking for my portfolio and more information just have a look at the homepage, and if you liked this article maybe you can share it on Bluesky.