Formulaires¶
Les formulaires HTML collectent des informations auprès des visiteurs — emails, messages, coordonnées, retours d'expérience, et plus encore. Silex inclut des éléments de formulaire et vous pouvez gérer les soumissions via des services externes.
Les formulaires dans Silex fonctionnent comme n'importe quel autre élément : vous les ajoutez visuellement, configurez leurs propriétés et publiez. Lorsqu'un visiteur soumet un formulaire sur votre site en ligne, les données sont envoyées à un service de votre choix (comme Formspree ou Netlify Forms), pas directement à votre email.
Ajouter des éléments de formulaire¶
Dans le panneau Blocs (barre latérale gauche) :
- Cherchez la section Forms, ou recherchez les éléments de formulaire
- Éléments disponibles : Form, Input, Textarea, Select, Button, Label, Checkbox, Radio
Form — Le conteneur qui enveloppe tous les autres éléments de formulaire. Chaque formulaire doit en avoir un. C'est comme un Container qui porte des propriétés spécifiques aux formulaires. Le bloc Form arrive avec des champs d'exemple (Name, Email, Gender, Message et un bouton Send) que vous pouvez garder, modifier ou supprimer.
Input — Un champ de texte sur une seule ligne. Exemples : nom, adresse email, mot de passe. Dans les réglages de l'élément (icône engrenage en haut du panneau de droite), le menu Type propose :
text(par défaut) — n'importe quel texteemail— pour les adresses email (affiche une erreur de validation si le format est incorrect)password— masque le texte au fur et à mesure que l'utilisateur tapenumber— pour les saisies numériques
Checkbox et Radio — Une case à cocher, et un bouton à choix unique (donnez le même Name aux boutons radio d'un même groupe).
Textarea — Un champ de texte multi-lignes pour les messages plus longs. Idéal pour les formulaires de contact, les retours d'expérience ou les commentaires.
Select — Un menu déroulant. Écrivez ses choix dans le champ Options des réglages de l'élément, un par ligne, sous la forme valeur::Libellé (par exemple small::Petit).
Button — Réglez son Type sur submit dans les réglages de l'élément pour qu'il envoie le formulaire. Le bloc Button, et le bouton Send du bloc Form, sont de type button par défaut : ils ne font rien tant que vous ne changez pas le Type.
Label — Optionnel mais recommandé. Associe du texte à un champ de saisie (améliore l'accessibilité et l'ergonomie). Tapez l'ID de l'Input (un champ de ses réglages de l'élément) dans le champ For du Label.
Construire un formulaire de contact simple¶
Structure sur le canvas :
- Ajoutez un élément Form (Blocs → Forms → Form). Il contient déjà un champ nom, un champ email, des cases Gender, un champ message et un bouton Send
- Sélectionnez la ligne Gender et supprimez-la
- Sélectionnez le bouton Send, et dans les réglages de l'élément réglez son Type sur
submit - Dans le Style Manager, définissez le Form sur Display : Flex et Flex direction : Column pour les empiler verticalement
- Ajoutez un Row Gap (par ex.
16px) pour un espacement régulier entre les éléments
Styliser les éléments :
- Ajoutez du padding et de la largeur aux champs de saisie pour les agrandir
- Définissez la Font-size pour la lisibilité
- Ajoutez Border et Border-radius pour un aspect soigné
- Sur le bouton de soumission : définissez une Background color, du padding, et éventuellement Font-weight : bold
Configurer l'action et la méthode du formulaire¶
Après avoir construit le formulaire visuellement, vous devez configurer où les données sont envoyées lorsque quelqu'un le soumet.
Dans les réglages de l'élément (icône engrenage), avec l'élément Form sélectionné :
- Action — L'URL où les données du formulaire sont envoyées. C'est là que les services externes interviennent (voir la section suivante).
- Method — Généralement
POST(recommandé pour la plupart des formulaires).GETest moins courant et place les données dans l'URL, ce qui est visible par l'utilisateur.
Exemple d'action : https://formspree.io/f/xyzabc123
Cela indique au formulaire d'envoyer toutes les données soumises à Formspree, un service propriétaire de soumission de formulaires qui a une offre gratuite.
Gérer les soumissions avec des services externes¶
Silex ne fournit pas de backend intégré pour les soumissions de formulaires. À la place, vous envoyez le formulaire à un service ou à un outil qui collecte les données et les envoie généralement à votre email.
Un formulaire Silex est un formulaire HTML simple : le navigateur du visiteur l'envoie directement à l'URL du champ Action. Les options ci-dessous acceptent ce type de formulaire, sans code en plus. Après l'envoi, le visiteur voit la page renvoyée par le service (une page de remerciement, ou une réponse brute pour certains outils).
Les options sont classées par type : d'abord le libre (logiciel libre qu'aucune entreprise ne contrôle), puis l'open source (logiciel libre, mais une entreprise ou un accord de contribution décide), puis tout le reste (open core, propriétaire, source disponible).
Libre :
- Huginn (libre, MIT) : un outil d'automatisation à installer sur votre propre serveur. Un agent Webhook reçoit le formulaire, un agent Email vous l'envoie. Maintenu par des bénévoles. Demande quelques compétences techniques.
Open source :
- WordPress + Contact Form 7 (open source, GPL) : utile si vous utilisez déjà WordPress comme source de données (configurer WordPress). Contact Form 7 est développé par Rock Lobster Inc. WordPress a une fondation à but non lucratif, mais le projet est dirigé en pratique par Matt Mullenweg, qui dirige aussi l'entreprise Automattic. Voir Exemple : Contact Form 7 plus bas.
- Node-RED (open source, Apache 2.0) : un outil d'automatisation à installer sur votre propre serveur. Un nœud http in reçoit le formulaire, un nœud email (paquet
node-red-node-email, à installer) vous l'envoie. C'est un projet de l'OpenJS Foundation (à but non lucratif), mais les contributeurs doivent signer un accord de licence de contribution (CLA), et l'essentiel du travail vient de l'entreprise FlowFuse. Demande quelques compétences techniques.
Tout le reste (open core, propriétaire, source disponible) :
- n8n (source disponible, pas un logiciel libre) : outil d'automatisation. En auto-hébergement, un nœud Webhook reçoit le formulaire et le workflow peut vous l'envoyer par email. Sa licence, la Sustainable Use License, n'autorise l'usage que pour les besoins internes de votre entreprise.
- Formspree (propriétaire) : service hébergé. Offre gratuite : 50 soumissions par mois, avec la page de remerciement de Formspree.
- Basin (propriétaire) : service hébergé. Offre gratuite : 1 formulaire, 50 soumissions par mois.
- Web3Forms (propriétaire) : service hébergé. Offre gratuite : 250 soumissions par mois. Vous ajoutez votre clé d'accès dans un champ caché (un Input avec le Name
access_key, et dans sa section Attributestype=hiddenetvalue= votre clé). - FormSubmit (propriétaire) : service hébergé gratuit. L'URL d'action contient votre adresse email, que vous confirmez une fois par email.
- Static Forms (propriétaire) : service hébergé avec une offre gratuite.
- Netlify Forms (propriétaire) : seulement pour les sites publiés sur Netlify. Ajoutez au Form l'attribut
data-netlifyavec la valeurtrue(section Attributes des réglages de l'élément).
Note sur la vie privée : avec un service hébergé, les messages de vos visiteurs passent par les serveurs de ce service et y restent. Indiquez-le dans votre politique de confidentialité. Un outil installé sur votre propre serveur garde les données chez vous.
Pour aller plus loin (ces options demandent du JavaScript, un relais ou une intégration, pas seulement le champ Action) :
- Votre propre script : un petit script PHP ou Node.js sur votre hébergement, qui reçoit le formulaire et vous l'envoie par email. Contrôle total, mais vous devez l'écrire et le maintenir.
- hugo-contact (open source, MIT, par Caffeinated Softworks) : petit programme Go auto-hébergé qui reçoit les formulaires et les envoie par email. Il demande un petit script anti-spam sur la page (code personnalisé).
- EmailJS (propriétaire) : envoie des emails depuis JavaScript. Offre gratuite : 200 requêtes par mois.
- Grist (open core : grist-core est sous Apache 2.0, l'édition Enterprise est propriétaire) : son API demande un jeton, un formulaire Silex ne peut donc pas lui envoyer de données directement. Vous pouvez intégrer dans votre page un formulaire créé dans Grist, ou passer par un relais.
Exemple : Configurer un service de soumission de formulaires¶
Quelle que soit l'option choisie, les étapes générales sont les mêmes :
- Créez un compte ou installez votre outil auto-hébergé
- Obtenez une URL d'action de formulaire (par ex.
https://formspree.io/f/xyzabc123ouhttps://votre-serveur-node-red.example/contact) - Dans Silex, sélectionnez votre élément Form
- Dans les réglages de l'élément (icône engrenage), collez l'URL dans le champ Action
- Assurez-vous que Method est défini sur
POST - Publiez votre site et testez le formulaire sur votre site en ligne
Exemple : Contact Form 7¶
Contact Form 7 peut recevoir un formulaire Silex par l'API REST de WordPress, sans clé d'API (tutoriel CSS-Tricks, en anglais) :
- Dans WordPress, créez un formulaire dans Contact Form 7 et notez son identifiant (dans l'URL de sa page de modification). Les noms de ses champs doivent correspondre au Name de vos champs Silex
- Dans Silex, réglez l'Action du Form sur
https://votre-site-wordpress/wp-json/contact-form-7/v1/contact-forms/<ID>/feedbacket Method surPOST - Dans la section Attributes du Form, ajoutez
enctypeavec la valeurmultipart/form-data - Ajoutez des champs cachés au formulaire : pour chacun, ajoutez un Input, réglez son Name, puis dans sa section Attributes ajoutez
typeavec la valeurhiddenetvalueavec la valeur ci-dessous._wpcf7_unit_tag(par ex.wpcf7-f<ID>-o1) est obligatoire : sans lui, Contact Form 7 refuse le formulaire. Les autres sont facultatifs mais recommandés :_wpcf7(l'identifiant du formulaire),_wpcf7_locale(par ex.fr_FR) et_wpcf7_container_post(0)
Limites : le visiteur arrive sur une réponse JSON brute, pas sur une jolie page. Une réponse avec le code 200 peut quand même signifier que l'email n'est pas parti : vérifiez la valeur status dans le JSON pendant vos tests. Si reCAPTCHA est actif côté WordPress, ces soumissions sont toutes classées comme spam (status vaut spam) et aucun email ne part.
Validation de formulaire¶
Les navigateurs modernes valident les champs de formulaire avant la soumission :
- Input email — Doit contenir un format d'email valide
- Input number — Doit être un nombre
- Required — Vous pouvez marquer les champs comme obligatoires pour que les utilisateurs ne puissent pas soumettre un formulaire vide
Pour rendre un champ obligatoire :
- Sélectionnez le champ (Input, Textarea, Select, Checkbox ou Radio)
- Dans les réglages de l'élément (icône engrenage), cochez Required
- Le navigateur empêche désormais la soumission du formulaire si ce champ est vide
Styliser les éléments de formulaire¶
Les éléments de formulaire sont des éléments HTML classiques, vous pouvez donc les styliser entièrement dans le Style Manager :
- Définissez Width pour élargir les champs de saisie (par ex.
100%ou300px) - Ajoutez du Padding pour l'espacement interne
- Définissez Border et Border-radius pour l'aspect visuel
- Utilisez Font-size, Font-weight, Color et Background pour la typographie et les couleurs
- États de survol : sélectionnez un champ, puis dans le Style Manager, cherchez les pseudo-classes (
:hover,:focus). Elles vous permettent de styliser l'apparence d'un champ lorsque l'utilisateur le survole ou clique dessus
Formulaires responsives : Sur les écrans étroits, vous pourriez vouloir des champs de saisie pleine largeur. Utilisez un breakpoint pour définir Width à 100% sur mobile et 300px sur desktop. Consultez Design responsive pour plus de détails.
Modèles de formulaires courants¶
Inscription à la newsletter : - Un seul champ email + bouton de soumission - Action : Formspree, Mailchimp ou Substack - Les utilisateurs tapent leur email et cliquent sur S'abonner
Formulaire de contact : - Champs Nom, Email, Message - Action : Formspree ou similaire - Envisagez d'ajouter une case à cocher « J'accepte d'être contacté »
Formulaire de retour d'expérience : - Textarea pour le retour - Menu déroulant optionnel pour la catégorie (Bug, Demande de fonctionnalité, Général) - Bouton de soumission
Sondage : - Questions à choix multiples (boutons Radio avec le même Name) - Menu déroulant (Select et son champ Options) - Bouton de soumission
Limitations et bonnes pratiques¶
Pas de stockage côté client des formulaires — Si un visiteur rafraîchit la page, les données de son formulaire sont perdues. Si vous souhaitez conserver les données, utilisez JavaScript (hors du périmètre de Silex).
Pas de logique conditionnelle — Vous ne pouvez pas masquer/afficher des champs de formulaire en fonction de la saisie de l'utilisateur sans code personnalisé.
Pas de formulaires multi-étapes — Silex ne prend pas en charge nativement les formulaires qui s'étendent sur plusieurs pages.
Testez toujours après la publication — Testez votre formulaire sur le site en ligne. Soumettez des données de test et vérifiez qu'elles atteignent votre email ou le tableau de bord du service.
Informez les utilisateurs sur le traitement des données — Soyez transparent sur la destination des données. Si vous utilisez Formspree, mentionnez dans votre politique de confidentialité qu'un tiers gère les soumissions.
Utilisez le HTTPS — Les formulaires ne devraient fonctionner que via HTTPS (sécurisé). Votre site Silex est automatiquement en HTTPS s'il est publié sur GitLab Pages.
En savoir plus¶
- Comment fonctionne la publication — comprendre le pipeline complet que traversent les données de votre formulaire
- Publier sur GitLab — mettre votre site en ligne pour que les soumissions de formulaires fonctionnent
- Éléments — tous les éléments HTML disponibles
- Réglages de l'élément (icône engrenage) — définir des attributs sur les éléments
- Documentation Formspree — service détaillé de soumission de formulaires
- Documentation Basin — gestionnaire de formulaires alternatif
- Accessibilité des formulaires HTML — bonnes pratiques pour des formulaires inclusifs
Quiz¶
Q1 : Quel élément HTML enveloppe tous les champs de formulaire ?
- A) Input
- B) Form
- C) Textarea
Réponse
B) Form — Chaque formulaire doit avoir un conteneur Form qui enveloppe tous les inputs, textareas, selects et boutons.
Q2 : Où vont les données du formulaire lorsque quelqu'un le soumet ?
- A) Directement à votre email
- B) Vers une URL que vous spécifiez dans le champ
actiondu Form, généralement un service tiers comme Formspree - C) Vers les serveurs de Silex
Réponse
B) Vers une URL que vous spécifiez dans le champ action du Form, généralement un service tiers comme Formspree — Silex ne stocke pas les données de formulaire ; vous configurez leur destination.
Q3 : Quelle est la différence entre un Input et un Textarea ?
- A) Input est pour le texte sur une seule ligne, Textarea est pour le texte multi-lignes
- B) Textarea est uniquement pour les emails
- C) Ce sont la même chose ; Input est juste une abréviation
Réponse
A) Input est pour le texte sur une seule ligne, Textarea est pour le texte multi-lignes — Utilisez Input pour les saisies courtes (nom, email), Textarea pour les messages plus longs.
Q4 : Comment rendre un champ de formulaire obligatoire ?
- A) Définir Width sur required dans le Style Manager
- B) Cocher Required dans les réglages de l'élément (icône engrenage)
- C) Utiliser la propriété action du Form
Réponse
B) Cocher Required dans les réglages de l'élément (icône engrenage) — Le navigateur empêche alors la soumission si le champ est vide.
Q5 : Que contrôle la propriété method du Form ?
- A) L'apparence visuelle du formulaire
- B) La destination des données du formulaire
- C) La manière dont les données sont transmises (généralement POST ou GET)
Réponse
C) La manière dont les données sont transmises (généralement POST ou GET) — POST est la méthode standard et recommandée. GET est moins courant et place les données dans l'URL visible.