Comment fonctionne le forms API

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Salut les amis,

J'ai lu le document "Forms Api QUICKSTART GUIDE", et commence a comprendre comment créer un formulaire. Mais je ne comprend pas ou est-ce que je dois mettre ce code. Est-ce que je dois créer un module ?? ou autrement ??

Si qqun a un idée, serais sympa.

Merci

Merci tostinni pour la réponse,

En fait la doc. pour la création de module est assez grande et est en anglais. Est-ce que je suis obligé de lire tous ce doc. pour pouvoir créer un formulaire ??

Sinon qqun pourrait m'expliquer comment créer un module (quel code à mettre dans quel fichier)??

En fait le Forms API Quickstart Guide te montre toutes les etapes de la creation d'un formulaire, mais ne te dis pas qu'il faut mettre tout ca dans un module.

Donc si tu as tout bien suivi, tu dois avoir:
- tonModule_form qui affiche tous les champs du formulaire en utilisant le hook_form
- tonModule_page qui utilise drupal_get_form pour afficher ton formulaire.
- tonModule_menu qui permet de definir les callbacks et menus en utilisant le hook_menu

Du coup pour tester ca il faut que tu crees un module qui s'appelle tonModule le mettre ds un repertoir a lui accompagne d'un fichier .info, l'activer, aller sur l'url "?q=tonModule" et le tour est joue tu vois ton formulaire.

Apres tu peux raffiner tout ca avec hook_validate, hook_submit et d'autres afin de gerer les donnees entrees dans ton formulaire.

A part ca je te conseille de jeter un coup d'oeil sur des petits modules comme tracker ou watchdog qui mettent en situation reele ces differents hooks.

Merci tostinni,

J'ai réussi à créer un formulair avec les Forms APIs.

J'ai une autre question maintenant. Je doit utiliser du dhtml dans mon formulaire. Je m'explique :

J'ai une liste déroulante qui a les valeurs suivantes :

Langues :

Français
Anglais
Allemand
Espagnol
Autre (spécifier)

Et j'ai un textfield caché.

Si mon utilisateur sélectionne Autre(spécifier), ce textfield doit apparaitre.

Alors ma question

1)Est-ce que c'est possible de faire ??
2)Si oui, est-ce qqun à un idée comment fair??(une indice, un lien etc...)

Je vous remercie les amis.

Salut,
Sincerement je suis desole mais j'ai vraiment aucune idee de comment faire ca... Enfin si en utilisant du JS dans un formulaire HTML ca se fait facilement.

Cependant a ma connaissance, form API ne permet pas ce genre d'interaction entre les champs...

A l'heure actuelle, ce que tu pourrais faire est jeter un oeil sur Dynamic and Multipage forms with Forms API qui est a mon avis le seul moyen de parvenir a cela avec Drupal.

Et puis si jamais t'es motive, fait une proposition pour le form API 3.0 avec plein de AJAX dedans ;)

Bon courage

Hello,

Comme évoqué dans un autre post (soumis par awan également) :
- Oui, c'est possible
- C'est du JavaScript, pas du Drupal. Ca serait un peu compliqué de tout t'expliquer ici mais il y a plein de ressources en ligne gratuites et bien faites sur JavaScript.

La seule chose spécifique à Drupal, c'est comment lier un fichier JavaScript à une page de ton site Drupal (je l'ai expliqué dans l'autre post).

Note à tostinni : la page "Dynamic and Multipage forms with Forms API" explique comment "découper" un formulaire en plusieurs écrans, mais sans JavaScript ni AJAX.

Yep yep j'ai bien vu que ca permettait juste de decouper le formulaire, le truc c'est que vu que awan demandait de faire un formulaire drupal en Ajax (pour avoir de l'interaction entre differents champs), a mon humble connaissance c'est pas possible donc je lui proposais l'alternative "multi pages"...

Car sinon tu perds la simplicite de creation d'un formulaire drupal si tu inseres ton code comme etant une simple page HTML (je pense meme que c'est pas super recommandable nan ? )

Bonjour,

Je rebondit sur ce poste toujours à propos de la création de formulaires.
Après avoir compris les api et créé un module, comment afficher le formulaire dans une page précise ?

Merci d'avance pour vos réponses !

Bonsoir,

Merci pour ta réponse, mais décidement ca ne marche pas. Au bout d'un moment j'ai finalement reprise l'intégralité du code présent dans Drupal.org à l'adresse suivante : http://drupal.org/node/68159#comment-129394
que j'ai placé dans un module myform.
Ensuite deux nodes ont été créés (sinon je rencontre une erreurs) :
- myform/sample
- myform/multiple

Une fois le module activé le lien dans le menu apparaît bien mais quand je clique dessus je tombe sur une page sans formulaire !

J'ai dû rater un truc dans la doc mais je ne comprends pas quoi ...

Si vous avez une idée you're welcome !

Salut,

Tu as vu les explications de tostinni plus haut sur cette page ? Elles sont hyper claires, difficile de faire mieux. Je te conseille vivement le lire le Forms API Quickstart Guide, tout est là !!

Au final, tu dois te retrouver avec un module contenant les fonctions suivantes :

<?php
/<strong>
 *
Implémentation du hook_menu().
 */
function
TONMODULE_menu($may_cache) {
  if (
$may_cache) {
   
$items[] = array(
     
'path' => 'page-contenant-le-formulaire',
     
'title' => 'Titre de la page',
     
'callback' => 'affiche_page_formulaire',
     
'access' => TRUE,
    );
  }
  return
$items;
}

/</
strong>
 *
Fonction qui affiche la page contenant le form.
 */
function
affiche_page_formulaire() {
 
$output = 'Texte avant le form';
 
$output .= drupal_get_form('mon_form');
 
$output .= 'Texte après le form';
  return
$output;
}

/**
 * Fonction définissant les champs du form.
 */
function mon_form() {
 
$form['champ1'] = array('#type' => 'textfield','#title' => 'Champ 1');
 
$form['submit'] = array('#type' => 'submit','#value' => 'Envoyer');
  return
$form;
}
?>

re re merci pour ta réponse mais décidément ca ne marche pas. Effectivement j'ai tout lu (le quick start guide, des exemples, le post de totsinni....) mais aucun formulaire ne s'affiche dans la page qui reste définitivement vide (et aucune trace dans le code source généré). y'a un truc qui cloche, je vais tout réinstaller, on verra bien.... a moins qu'il faille ajouter un truc dans la page elle même (mais ayant lu pas mal de choses ces jours-ci je ne pense pas)

Je déterre un peu le sujet car j'ai un soucis similaire...
J'essaye de créer une page contenant un formulaire directement depuis mon module mais lorsque j'accède à la page, celle-ci est entièrement vide.

Voici le contenu de mon module :

<?php
// $Id$

function  calendrier_noel_init() {
 
// The following function needs to be disabled in a Prod environment
   // This is usefull in a Dev environment as it will rebuild the menu without having to reload the modules page everytime you make a change to the hook_menu
 
menu_rebuild();
}

function calendrier_noel_form() {
  
$form['champ1'] = array('#type' => 'textfield', '#title' => 'Champ 1');
   
$form['submit'] = array('#type' => 'submit', '#value' => 'Envoyer');
   return
$form;
}

function calendrier_noel_menu() {
 
$items['calendrier-noel'] = array (
     
'title' => "Titre de la page",
     
'page callback' => 'calendrier_noel_callback',
     
'access arguments' => array('access content'),
     
'type' => MENU_CALLBACK,
  );
 return
$items;
}

function calendrier_noel_callback() {
   
$output = 'Texte avant le formulaire';
  
$output .= drupal_get_form('calendrier_noel_form');
 
$output .= 'Texte après le formulaire';
  return
$ouput;
}

?>

A noter que je suis sous Drupal 6.
Quelqu'un aurait-il une idée de ce qui ne va pas ??

Merci d'avance ! :)