Le projet
Dernièrement j’ai recherché un éditeur de formulaires en mode WEB. De manière logique je suis parti à la recherche de cela sur le web, pensant que de nombreux projets devaient traiter ce problème (je n’aime pas développer quelque chose si cela existe déjà). Après différents tests et je suis venu à la conclusion que cela n’existait pas (ou que c’est vraiment très mal référencé…).
J’ai donc profité de mes vacances pour réaliser ce « petit » projet.

Suite à ma recherche, je me permets de signaler les sites suivants qui s’approchaient de mon objectif (mais sans être opensource).
JotForm : J’ai bien aimé sa présentation
Wufoo : Semble intéressant mais une inscription est obligatoire
L’objectif
Il est relativement simple !
Démonstration rbl_forms (sans chili)
Démonstration rbl_forms avec mise en form html/xml (avec chili)
- Permettre de construire dynamiquement un formulaire en mode 100% web
- Ne pas obliger d’utiliser une librairie tierce (jQuery, prototype, dojo,..) dans le code généré
- Offrir les contrôles de bases (zone obligatoire, format, …)
- Être facilement adaptable (là c’est à vous de me dire si le but est atteint)
- Ne pas utiliser de tableau
- Sauvegarder au format XML
- Générer une page de « preview » en pur html
Outils utilisés
jQuery : Je l’aime de plus en plus c’est lib !
jQuery UI : l’extension logique pour travailler en mode Web.
t_fotm : Pour la partie validation de formulaire
Les fonctionnalités
Pour faciliter la création visuelle du formulaire l’utilisation du « drag & drop » est importante pour déposer des zones du formulaire ou les déplacer.
Il y a trois niveaux de personnalisations ( Formulaire, Colonne, Element ). Ces différents panneaux permettent de spécifier précisément le format et la présentation du formulaire.
Attention ! S’il n’y a pas de colonne dans le formulaire vous ne pouvez pas déposer de zones !
Le panneau formulaire

Cette boite de dialogue permet de préciser les informations suivantes (elle s’active en cliquant sur l’item « Edition Form » du panneau de gauche) :
- Le nom : propriété name du formulaire
- Le fichier : pour la sauvegarde
- Le titre : Afficher dans le formulaire (legend du fieldset)
- L’action : propriété action (url ou autre)
- La méthode : POST ou GET
- La taille : Apparait dans la propriété style (width, height)
- Le layout : actuellement non utilisé
- Le CSS : Cela donne le style principal du formulaire
Dans le cas d’une création d’un nouveau formulaire ne pas oublier de modifier la zone « fichier » pour préciser le nom des fichiers de sauvegarde.
Les colonnes

Ne souhaitant pas avoir des formulaires trop « verticaux » j’autorise la définition de plusieurs colonnes pour la construction de ces éléments. Actuellement je limite cela à 3 colonnes.
Vous pouvez éditer les propriétés de la colonne en sélectionnant (par un simple click) la ligne « colonne 1″ de couleur, jaune/vert puis en cliquant sur l’item « Edition » du panneau de gauche.
Description du panneau :
- Le nom de la colonne : non utilisé
- Taille : (width, height) peut être définie en redimensionnant la colonne ou en saisissant directement les valeurs
- Le layout : c’est une classe CSS qui permet de spécifier le type de présentation de la colonne
- Le CSS : autre classe CSS (actuellement non définie mais implémenté)
L’item suppression dans le menu de gauche permet de supprimer une colonne avec l’ensemble de ses zones.
Les zones

Vous pouvez ajouter des zones dans une colonne du formulaire par simple drag & drop à partir du menu de gauche. Il apparait alors une boite de dialogue vous invitant à préciser certaines informations (ces données changent suivant le type de zone).
- ID : apparait en lecture seule à titre d’information
- Nom : zone name
- Label : Information affichées devant ou au dessus de la zone
- AccessKey : Raccourci clavier pour accéder à la zone
- Format : c’est une liste de format classique (email, date, money, …) pour des contrôles de saisies
- Freemask : C’est également un format mais la vous devez le précisez
- 9 : Un caractère numérique 0-9
- # : Un caractère numérique 0-9 facultatif
- A : Un alpha en majuscule
- a : Un alpha en majuscule facultatif
- M : Un alpha
- m : Un alpha facultatif
- N : Un alphanumérique
- n : Un alphanumérique facultatif
- V : Une virgule ou point
- v : Une virgule ou point facultatif
- S : Un signe + ou –
- s : Un signe facultatif
- T : Un caractère
- t : Un caractère facultatif
- Exp. Reg. : Une expression régulière (pour les formats plus complexes ne pouvant pas être gérés par le freemask)
- Taille : longueur de la zone affichées (size)
- Table associée : pour une utilisation prévue avec les « memorytable »
- Longueur max : zone maxlength
- autoskip : passage automatique à la zone suivante si le nombre maximun de caractères est saisi
- CSS : style html de la zone (cadrage à droite pour les nombres)
- Obligatoire
- Lecture seule
- Aide : message d’aide
Exemple de formulaire

Exemple d’un formulaire
Pour les prochaines versions
Je souhaite ajouter plusieurs fonctionnalités dans les prochaines versions de cet outil.
- CSS : Ajout et amélioration des CSS (formulaires, colonnes, zones)
- Langues : Proposer l’outil dans plusieurs langues sans impact du code
- Ajout de zones complexes : Captcha, Onglets, …
- Choix de différent datepicker et outils de contrôles
- Proposer des scripts de chargements et de sauvegardes en JSP, ASP, Perl…
- Et surement bien d’autre chose.
N’hésitez pas à me contacter si vous souhaitez m’aider dans ce développement ou si vous avez ajouté une fonctionnalité ou corrigé un bug.
Téléchargement
rbl_forms v1_0
Bonjour,
Rudement bien fichu ton générateur de formulaire !
Facile à prendre en main.
Petit problème :
Si j’ajoute un bouton et que je clic dessus durant la phase de création, on revient à l’état zéro, tout a disparu.
Cordialement
Christian BELLEST
Merci..
Je vais ajouter un controle sur le bouton en mode « design ». Cela affichera une alerte et non pas faire’ un post du formulaire.
Je proposerai très rapidement une nouvelle version incluant :
Ajout d’une colonne par defaut
Suppression de la possibilité de post du formulaire en conception
Et un composant « Panel » permettant de définir des formulaires multi pages
Je travaille actuellement sur un gros projet Web et c’est vrai que ce type d’outil est bien venu même si pour moi c’est un peu tard! Je suis dans la même démarche que toi avec un projet (pour l’instant dans ma petite tête) de générateur d’écrans AJAX.
Excellent travail!
Cordialement
Du bel ouvrage didactique. L’esprit de partage, c’est quand même du gros job mis en libre accès.
Félicitation.
Ben
Beau boulot !
Bonjour,
Très bon travail et quel travail!!
J’essaye d’adapter votre programme pour en faire un plugin du CMS SPIP, mais je suis un peu coincé car les fenêtre pour renseigner les champs s’ouvrent vides.
Quel est la partie du script qui gère cela?
J’imagine qu’il s’agit juste d’un problème de chemin, mais je sèche totalement
Merci d’avance et encore Bravo
Merci..
Pour la gestion des boites de dialogue
- rbl_base.js : showControlPanel pour les elements et les colonnes
Ce code charge le code html de la boite et l’affiche
- rbl_form.js : showFormpanel : pour les proprietes du formulaire
Si tu utilise firefox avec la console d’erreur tu trouve normalement facilement ton erreur.
(et autrement chrome à un debugueur javascript pas à pas)
N’hésite pas à poser des questions (et a améliorer ce script)
Très beau travail, fort utile.
Merci et bonne continuation.
Bonjour,
Je viens de découvrir cet excellent travail, et j’essaie aussi de l’adapter pour spip (mais en le détournant un peu). Je rencontre cependant un pb avec les formulaires des éléments qui ne veulent pas s’ouvrir (la modal ne s’ouvre pas). Aprés un drag/drop d’un élément ds une colonne, il ne se passe rien. L’élément prends bien sa place, mais la fenêtre modale ne s’ouvre pas. I je sélectionne cet élément et que je veux l’éditer, même résultat, rien ne se passe. Par contre, pas de pb avec les formulaires d’édition des colonnes et du formulaire principal. Une idée du pourquoi de la chose ? Mes maigres connaissances ne me permettent pas de trouver où se situe le pb.
@bernard : Pourrais-tu me dire comment tu as disposé les différents dossiers dans l’architecture de spip ?
Merci et encore bravo pour le travail
Re,
Ben voila, c’est débuggé! Il s’agissait en fait de la fonction dialog (rbl_base.js ligne 135). J’ai du renseigner « en dur » l’id de la « boite » à ouvrir (replacer ;
jQuery(this).dialog('open');
par :
jQuery('#dialog_elt').dialog('open');
Et comme il s’agit là d’un identifiant unique, je ne prends pas beaucoup de risques non ?
Cordialement
DoM
P.S. Je vous présenterai le résultat dés que je pourrait mettre en ligne. Merci encore
bravo pour ce travail, c vraiment parfait, juste une propostion, pour rendre ce projet vraiment remarquable, pourquoi ne pas creer une table mysql pour enregistrer les donnees issues du formulaire
Ajouter une réponse