SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Drupal Form API
#NWX Tech 6
QUI SUIS-JE ?
• Développeur / Intégrateur Drupal
• www.laborouge.com
• twitter.com/laborouge
2
LE FORMULAIRE
• 1ère interactivité
• Besoin récurrent
3
DRUPAL API FORM
• Utilisation de tableau
• Drupal se charge du reste
• Compatibilité des thèmes
• Compatibilité des modules
• PHP, AJAX & JavaScript
• Sécurité, fiabilité et accessibilité
• Site Multilingue
4
GÉNÉRATION DU FORMULAIRE
drupal_get_form()
hook_form()
hook_form_validate()
hook_form_submit()
5
API EN DÉTAILS
api.drupal.org/api/drupal/developer!topics!for
ms_api_reference.html/7
6
UNE API RICHE
api.drupal.org/api/drupal/developer!topics!for
ms_api_reference.html/7
7
FORM ELEMENTS
• Textfield / Textarea
• Password
• Select / Radios / Checkboxes
• Date
• Managed file
• Hidden
• Fieldset
• Submit
8
PRINCIPALES PROPRIÉTÉS
• #type
• #title
• #description
• #options
• #default_value
• #size
• #maxlength
• #attributes
• #required
• #weight
• #prefix
• #suffix
9
HOOK_FORM()
• Construction du formulaire
• $form[]
• hook_form_alter
10
function hook_form() {
}
EXEMPLE - TEXTFIELD
$form['mail'] = array(
'#type' => 'textfield',
'#title' => t('Mail'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
11
EXEMPLE - SELECT
$form['job'] = array(
'#type' => 'select',
'#title' => t('Job'),
'#options' => array(
'Developper' => t('Developper'),
'Web Designer' => t('Web Designer '),
),
'#default_value' => t('Select a job...'),
'#prefix' => '<div class="apiform clearfix">'
'#suffix' => '</div>',
);
12
EXEMPLE - SUBMIT
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Send'),
'#attributes' => array(
'title' => t('Send'),
),
);
13
FINALISATION DU FORMULAIRE
$form['#validate'][] = 'hook_validate';
return $form;
14
HOOK_VALIDATE()
• Validation du contenu saisi
15
function hook_validate(&$form, &$form_state) {
}
EXEMPLE – FORM_SET_ERROR
If(!valid_email_address($form_state['values']['mail'])) {
form_set_error('mail', t('Your email is not valid !!!'));
}
16
EXEMPLE – FORM_SET_VALUE
If(empty ($form_state['values']['job'])) {
form_set_value($form['job'], t('Empty field'),
$form_state);
}
17
HOOK_FORM_SUBMIT()
• Soumission des données
18
function hook_submit($form, &$form_state) {
}
EXEMPLE
variable_set('mail', $form_state['values']['mail']);
variable_set('job', $form_state['values']['job']);
drupal_set_message(t('Congratulation !!!'));
drupal_mail('monformulaire', 'envoie_admin',
$form_state['values'], TRUE);
19
HOOK_MAIL()
• Génération d’un mail
20
function hook_mail(&$key, &$message) {
}
RÉCUPÉRATION DES DONNÉES
$mail = variable_get('mail', 'Mail');
$job = variable_get('job', 'Job');
21
GÉNÉRATION DU MAIL
switch ($key) {
case 'envoie_admin':
$message['to'] = 'monmail@mail.com';
$message['subject'] = t('Formulaire rempli');
$message['body'][1] = t('E-mail : ') . $mail;
$message['body'][2] = t('Job : ') . $job;
break;
}
22
CAS CLIENT
• Formulaire de contact
• Réponse à une offre d’emploi
• Front-office & Back-office
23
INTEROPÉRABILITÉ
• Mime Mail
• CAPTCHA
• Token
• Tous les modules Drupal
24
LES ALTERNATIVES
• Webform : drupal.org/project/webform
25
CONTACT
• www.laborouge.com
• twitter.com/laborouge
• mickael.deffontaine@gmail.com
26
QUESTIONS ?
27

Mais conteúdo relacionado

Destaque

Hold-up et meurtre dans une bijouterie. Ana et Elena.
Hold-up et meurtre dans une bijouterie. Ana et Elena.Hold-up et meurtre dans une bijouterie. Ana et Elena.
Hold-up et meurtre dans une bijouterie. Ana et Elena.anaisruiz
 
Laura Varón et Marta Díez. 3º D
Laura Varón et Marta Díez. 3º DLaura Varón et Marta Díez. 3º D
Laura Varón et Marta Díez. 3º Danaisruiz
 
Mª Angeles Chamorro. 3º D
Mª Angeles Chamorro. 3º DMª Angeles Chamorro. 3º D
Mª Angeles Chamorro. 3º Danaisruiz
 
Chaquechatdoitavoirsonchien j
Chaquechatdoitavoirsonchien jChaquechatdoitavoirsonchien j
Chaquechatdoitavoirsonchien jDominique Pongi
 
Licence Professionelle Management public et developpement territorial
Licence Professionelle Management public et developpement territorial  Licence Professionelle Management public et developpement territorial
Licence Professionelle Management public et developpement territorial essa1988
 
Injures, racisme, diffamation : Dehors!
Injures, racisme, diffamation : Dehors!Injures, racisme, diffamation : Dehors!
Injures, racisme, diffamation : Dehors!anaisruiz
 
La didáctica en la educación
La didáctica en la educación   La didáctica en la educación
La didáctica en la educación Ana Cusac
 
Projet de carrières informatiques
Projet de carrières informatiquesProjet de carrières informatiques
Projet de carrières informatiquesveroniquehache3
 
Henri 2 toulouse lautrec nj
Henri 2 toulouse lautrec njHenri 2 toulouse lautrec nj
Henri 2 toulouse lautrec njDominique Pongi
 
Adan lenguaza
Adan lenguazaAdan lenguaza
Adan lenguazaAdan
 
Adan lenguaza
Adan lenguazaAdan lenguaza
Adan lenguazaAdan
 

Destaque (20)

Monfils 1
Monfils 1Monfils 1
Monfils 1
 
Vente d'affiches
Vente d'affichesVente d'affiches
Vente d'affiches
 
Hold-up et meurtre dans une bijouterie. Ana et Elena.
Hold-up et meurtre dans une bijouterie. Ana et Elena.Hold-up et meurtre dans une bijouterie. Ana et Elena.
Hold-up et meurtre dans une bijouterie. Ana et Elena.
 
Media 1
Media 1Media 1
Media 1
 
Laura Varón et Marta Díez. 3º D
Laura Varón et Marta Díez. 3º DLaura Varón et Marta Díez. 3º D
Laura Varón et Marta Díez. 3º D
 
Mª Angeles Chamorro. 3º D
Mª Angeles Chamorro. 3º DMª Angeles Chamorro. 3º D
Mª Angeles Chamorro. 3º D
 
Chaquechatdoitavoirsonchien j
Chaquechatdoitavoirsonchien jChaquechatdoitavoirsonchien j
Chaquechatdoitavoirsonchien j
 
Calendrier111
Calendrier111Calendrier111
Calendrier111
 
Licence Professionelle Management public et developpement territorial
Licence Professionelle Management public et developpement territorial  Licence Professionelle Management public et developpement territorial
Licence Professionelle Management public et developpement territorial
 
Injures, racisme, diffamation : Dehors!
Injures, racisme, diffamation : Dehors!Injures, racisme, diffamation : Dehors!
Injures, racisme, diffamation : Dehors!
 
Tuvas adorer
Tuvas adorer Tuvas adorer
Tuvas adorer
 
La didáctica en la educación
La didáctica en la educación   La didáctica en la educación
La didáctica en la educación
 
Projet de carrières informatiques
Projet de carrières informatiquesProjet de carrières informatiques
Projet de carrières informatiques
 
France2
France2France2
France2
 
Henri 2 toulouse lautrec nj
Henri 2 toulouse lautrec njHenri 2 toulouse lautrec nj
Henri 2 toulouse lautrec nj
 
Adan lenguaza
Adan lenguazaAdan lenguaza
Adan lenguaza
 
Adan lenguaza
Adan lenguazaAdan lenguaza
Adan lenguaza
 
Frimousse .f1 (1)
Frimousse .f1 (1)Frimousse .f1 (1)
Frimousse .f1 (1)
 
Find a nurse
Find a nurseFind a nurse
Find a nurse
 
Redes sociales y videoconferencia
Redes sociales y videoconferenciaRedes sociales y videoconferencia
Redes sociales y videoconferencia
 

Mais de Normandie Web Xperts

#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...Normandie Web Xperts
 
#nwxtech7 Grégory Le Garec - HTML5 Offline
#nwxtech7 Grégory Le Garec - HTML5 Offline#nwxtech7 Grégory Le Garec - HTML5 Offline
#nwxtech7 Grégory Le Garec - HTML5 OfflineNormandie Web Xperts
 
#nwxtech6 Olivier Martineau - Les démons en PHP
#nwxtech6 Olivier Martineau - Les démons en PHP#nwxtech6 Olivier Martineau - Les démons en PHP
#nwxtech6 Olivier Martineau - Les démons en PHPNormandie Web Xperts
 
#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le webNormandie Web Xperts
 
#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le webNormandie Web Xperts
 
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwdJulien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwdNormandie Web Xperts
 
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Normandie Web Xperts
 
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3Normandie Web Xperts
 
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSIIConférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSIINormandie Web Xperts
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Normandie Web Xperts
 
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tousConférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tousNormandie Web Xperts
 
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webConférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webNormandie Web Xperts
 
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...Normandie Web Xperts
 
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierConférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierNormandie Web Xperts
 
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric BissonConférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric BissonNormandie Web Xperts
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Normandie Web Xperts
 
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo LarcherConférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo LarcherNormandie Web Xperts
 
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain LouvetConférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain LouvetNormandie Web Xperts
 
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...Normandie Web Xperts
 

Mais de Normandie Web Xperts (20)

#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
 
#nwxtech7 Grégory Le Garec - HTML5 Offline
#nwxtech7 Grégory Le Garec - HTML5 Offline#nwxtech7 Grégory Le Garec - HTML5 Offline
#nwxtech7 Grégory Le Garec - HTML5 Offline
 
#nwxtech6 Olivier Martineau - Les démons en PHP
#nwxtech6 Olivier Martineau - Les démons en PHP#nwxtech6 Olivier Martineau - Les démons en PHP
#nwxtech6 Olivier Martineau - Les démons en PHP
 
#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web
 
#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web
 
FlexRox
FlexRoxFlexRox
FlexRox
 
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwdJulien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
 
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
 
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
 
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSIIConférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tousConférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
 
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webConférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
 
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
 
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierConférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
 
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric BissonConférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
 
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo LarcherConférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
Conférence #nwxtech5 : Introduction à Backbone.js par Hugo Larcher
 
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain LouvetConférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
 
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
 

#nwxtech6 Mickaël Deffontaine - Drupal API Form