API des formulaires sur Drupal 6

La documentation Drupal 6 n'est plus maintenue et en cours de dépublication.


Consultez le guide utilisateur Drupal en français directement sur drupal.org.

Si vous êtes habitués au PHP procédural, comprendre comment fonctionne Drupal pour générer les formulaires et traiter leurs données peut être déstabilisant. Voici les deux principales choses dont vous ne devez plus vous préoccupez en utilisant l'API des formulaires de Drupal :

  • rédiger le html de votre formulaire : Drupal génère lui même de A à Z le html d'un formulaire. Vous devez simplement lui précisez des informations des champs que vous désirez afficher (type, titre, valeur par défaut etc...) via un array().

  • récupérer les données en utilisant $_POST, $_GET etc... : L'API des formulaires récupère les données et les rend accessibles dans la variable $form_state['values'] que vous verrez plus bas.

Gérer un formulaire dans Drupal va en fait se constituer en 4 grandes étapes :
1) Créer une fonction qui va définir les éléments que va contenir votre formulaire
2) Ecrire une fonction de validation des données (permettant par exemple de vérifier que le champ "numéro de téléphone" contient bien uniquement des chiffres)
3) Ecrire une fonction de soumission du formulaire, qui va nous permettre de faire quelque chose des données transmises par le formulaire : les enregistrer dans la base de données par exemple.
4) Afficher le formulaire ! La fonction drupal_get_form() va permettre de générer le html de notre formulaire et de l'afficher.

Voici un exemple de code d'un formulaire très simple. Pour cela j'ai crée un petit module afin de pouvoir afficher ce formulaire sur une page dédiée. Vous trouverez ce module d'exemple attaché à cette page en bas.

n'oubliez pas de vider le cache de Drupal pour que votre nouveau item de menu soit pris en compte ! Sinon votre page ne s'affichera pas.

<?php
/<strong>
 *
Implémentation de hook_menu. Déclencher l'appel de la fonction (callback) 'exemple_de_page'
 * Lorsqu'
on se rend sur l'url 'exemple-de-page'
 */
function formexample_menu(){
  $items = array();
  $items['
exemple-de-page'] = array(
    '
title' => 'Exemple de formulaire', // titre de la page quand on se rendra sur l'url 'exemple-de-page'
    'page callback'
=> 'exemple_de_page', // La fonction appelée lorsqu'on se rend sur l'url exemple-de-page
   
'access arguments' => array('access content'), //un accès doit obligatoirement être précisé
   
'type' => MENU_CALLBACK, //indique que cet item de menu n'apparaitra dans aucun menu de Drupal, il est invisible.
   
);
  return
$items;
}

/</
strong>
 *
callback pour notre item de menu défini ci-dessus
 
*/
function
exemple_de_page(){
 
$output = 'Hello world ! ';
 
$output.= drupal_get_form('mon_formulaire');
  return
$output;
}

/**
 * Création de notre formulaire en utilisant l'API de Drupal
 */
function mon_formulaire(){
 
$form = array();
 
$form['nom'] = array(
   
'#type' => 'textfield',
   
'#title' => t('Votre nom'), 
   
'#required' => TRUE,
  );
 
$form['submit'] = array(
   
'#type' => 'submit',
   
'#value' => t('OK'),  
  );
  return
$form;
}

/<
strong>
 *
Fonction de validation du formulaire
 
* Il suffit d'ajouter _validate à la fin du nom de la fonction mon_formulaire ci-dessus pour que drupal
 * trouve cette fonction automatiquement
 */
function mon_formulaire_validate($form, &$form_state){
  if($form_state['
values']['nom'] == 'John'){
    return form_set_error('
nom', "Désolé, John, vous n'êtes pas autorisé à vous inscrire sur le site");
  }
}

/</strong>
 * Fonction de soumission du formulaire : on peut ici insérer les données du formulaire dans la base de données par exemple.
 * La encore, la convention de nommage avec _submit permet à drupal
 * de retrouver automatiquement la fonction de soumission
 */
function mon_formulaire_submit(
$form, &$form_state){
  drupal_set_message(
$form_state['values']['nom']);
 
$form_state['redirect'] = 'node'; // on redirige l'utilisateur sur la page de notre choix !
}
?>
Version de Drupal : 
Fichier attachéTaille
Icône texte brut formexample.rar_.txt1.07 Ko

Commentaires