Drupal 7 – Afficher les erreurs d’un formulaire dans le formulaire

Posted by on Oct 25, 2012 in Drupal, PHP | No Comments

Il existe déjà un module permettant d’afficher les erreurs d’un formulaire sous chaque champs concernés, mais si on veut simplement afficher tous les messages dans la balise <form> alors là, il faut mettre les mains dans le code. C’est quelque chose que j’ai eu besoin de faire pour un client et ça m’a posé pas mal de problèmes. L’utilisation de drupal_get_messages() permet en effet de récupérer les erreurs mais :

  1. Il faut l’appeler avant la génération de la page (car par défaut, drupal_get_messages() est destructeur, c’est à dire que l’appel va vider les messages)
  2. Il faut l’appeler dans le hook validate, parce que avant, il n’y a pas de message d’erreurs générés pour le formulaire.
  3. Problème : je récupère mes messages mais je les affiches comment ?

La solution ? la voici :

Utiliser le hook theme status_messages qui va se charger d’appeler lui même drupal_get_messages() et de tout mettre en forme pour l’affichage dans la balise form. Drupal_get_messages() étant destructeur les messages d’erreurs ne seront affichés qu’une fois sur la page. L’utilisation de #weight permet d’afficher les messages en haut du formulaire.