CRÉATION DE FORMULAIRE SIMPLIFIÉE

webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 - 22 sept. 2008 à 23:52
synanceia Messages postés 8 Date d'inscription lundi 16 août 2010 Statut Membre Dernière intervention 2 mars 2012 - 16 août 2010 à 20:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48021-creation-de-formulaire-simplifiee

synanceia Messages postés 8 Date d'inscription lundi 16 août 2010 Statut Membre Dernière intervention 2 mars 2012
16 août 2010 à 20:37
Bonjour,

Je me suis inspiré de ce travail pour créer mes propres classes...
http://www.phpcs.com/codes/PHPJSVFORM-CLASSES-PHP-JAVASCRIPTS-CREER-FACILEMENT-FORMULAIRE_52187.aspx
cs_Galip Messages postés 8 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 21 avril 2009
28 sept. 2008 à 19:15
Après réflexion je vais au moins finir cette source. Pour l'instant, il n'y a pas de grandes améliorations par rapport à l'ancien code (quoique). J'ai intégré les idées de webdeb. Seule l'implémentation du input de type text est faîte je continuerai quand j'aurai du temps libre.

A+
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
23 sept. 2008 à 17:23
Bin...

Ca dépend du code HTML en fait... et de ce à quoi tu veux que ça ressemble.

Par exemple, si tu veux deux colonnes, avec à gauche le libellé du champ et à droite le champ de saisie, tu peux au choix :
- utiliser un tableau <table>, mais il faut avouer que c'est quand même assez bof...
- utiliser deux

La première option étant plutôt mauvaise d'un point de vue sémantique, on va s'attarder sur la deuxième.
Un div conteneur pour chaque ligne, et dans chaque ligne, un div à gauche, un div à droite.


Pseudo :



Evidemment, on aura pris soin d'ouvrir la balise <form> plus tôt dans le code, histoire d'avoir un formulaire correctement déclaré.

Voilà pour le HTML.
Sans CSS, les deux div vont apparaitre l'un en dessous de l'autre.
Donc, dans le CSS :

.libelle_formulaire {float:left; width: 200px;} /* On fait flotter le libellé à gauche du champ */

Je pense que c'est bon, même si j'ai pas testé ce code précisément. Si ce code précis ne fonctionne pas, y'a au moins l'idée...
Après, on peut varier à volonté les classes CSS pour afficher correctement des checkbox (qui s'affichent traditionnellement l'une en dessous de l'autre, avec le texte à droite plutôt qu'à gauche), des radio, etc.
cs_Galip Messages postés 8 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 21 avril 2009
23 sept. 2008 à 16:31
Oui, j'avoue que j'aurais du poster seulement la fonction javascript dans la section appropriée parce que le code PHP ne présente pas grand intéret dans l'état actuel.

Si tu as un code qui permet d'aligner automatiquement les inputs d'un formulaire en CSS je suis preneur.

A+ et merci de tes remarques.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
23 sept. 2008 à 14:06
De rien.
Juste une petite remarque... Tu dis :
"L'intéret de cette source est la fonction javascript."
Est-ce que PHPCS est alors le meilleur endroit ? ;)

Puis tant que j'y suis, je viens de jeter un oeil à cette fonction JS, et j'ai une petite remarque...
Utiliser un JS pour aligner, ça ne me parait pas une très bonne idée. En fait, dans la pratique, j'ai tendance à n'utiliser JS pour ce genre de chose QUE quand je ne peux pas faire autrement... Mais avec des CSS bien foutus, ça n'arrive jamais...
cs_Galip Messages postés 8 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 21 avril 2009
23 sept. 2008 à 13:29
Bonjour, comme je l'ai dit dans la description ce code m'a simplement servi de test, donc je le voulais le plus simple possible, bien entendu une classe abstraite Input aurait été préférable avec ensuite comme classe dérivé InputText, InputCheckBox, ...

L'intéret de cette source est la fonction javascript. Il suffit de lui passer les id des inputs à aligner est automatiquement, le style des inputs est modifié pour qu'ils apparaissent alignés. Plus besoin de tatonner pour trouver le bon nombre de pixels à mettre.

Merci pour la source Neigedhiver j'ai regardé la démo ça à l'air très complet comme générateur.

++
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
23 sept. 2008 à 11:15
>> De plus, il est possible de mettre des hidden, radio, checkbox, tu peux spécifier le type dans le constructeur du input.

Ce n'est pas très "user friendly" comme syntaxe. Personnellement, je préfère avoir une méthode, voire même une classe, pour chaque type d'objet. Par exemple :

Une classe InputText
Une classe InputRadio
Une classe InputCheckbox
...

Chacune de ces classes dérivent d'une classe abstraite FormElement et implémente des interfaces communes (Renderable par exemple). Ainsi ton code sera beaucoup plus lisible en ayant ce genre de syntaxe :

$oForm = new Form('action','method');
$oInputTextNom = new InputText('nom');
$oInputTextNom->setLabel('Votre nom');
$oInputTextNom->setId('nom');

$oInputTextPrenom = new InputText('prenom');
$oInputTextPrenom->setLabel('Votre prénom');
$oInputTextPrenom->setId('prenom');

$oInputTextMentions = new InputCheckbox('mentions');
$oInputTextMentions->setLabel('Accepter les mentions');
$oInputTextMentions->setValue("J'accepte les mentions');
$oInputTextMentions->setChecked(false);
$oInputTextMentions->setDefaultValue('off');

$oForm->addElement($oInputTextNom);
$oForm->addElement($oInputTextPrenom);
$oForm->addElement($oInputTextMentions);

echo $oForm (appel implicite à __toString() qui appelle une méthode render() qui appelle même chaque méthode render() de chaque élément du formulaire).

C'est quand plus sympa comme syntaxe tu ne trouves pas ?

Tu peux même t'amuser à faire des retours d'instance dans tes méthodes. Tu ajoutes à la fin de tes méthodes "return $this;" pour pouvoir utiliser cette syntaxe :

$oInputTextMentions = new InputCheckbox('mentions');
$oInputTextMentions->setLabel('Accepter les mentions')->setValue("J'accepte les mentions')->setChecked(false)->setDefaultValue('off');

Ainsi tu peux chaîner les appels de méthodes sur un même objet.

++
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
23 sept. 2008 à 10:05
Salut,

J'ai pas regardé ton code, mais tu peux jeter un oeil là, éventuellement pour t'inspirer : http://www.phpcs.com/codes/GENERATEUR-FORMULAIRE-AJAX-PHP5_46124.aspx
cs_Galip Messages postés 8 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 21 avril 2009
23 sept. 2008 à 09:37
Comme je l'ai dit cette source m'a servi de test pour voir si c'était possible de faire facilement un formulaire qui s'aligne automatiquement.
Maintenant, je vais continuer en faisant mon moteur de template.
De plus, il est possible de mettre des hidden, radio, checkbox, tu peux spécifier le type dans le constructeur du input.

A+

PS : Si tu as compris la source tu verras qu'il est assez simple de rajouter des select, ...
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
22 sept. 2008 à 23:52
Hum on ne peut faire que des inputs dans ton formulaire ? Où sont les hidden, select, radio, checkboxes... ?

C'est loin d'être terminé et encore utilisable comme code. Pour générer mes formulaires, je préfère davantage m'appuyer sur le composant Zend_Form du framework Zend ou bien sur le framework de création de formulaire du framework symfony.

++
Rejoignez-nous