FORMOL, PACKAGE PHP5 DE GESTION DE FORMULAIRES XHTML

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 7 sept. 2007 à 13:46
cs_alterHD Messages postés 1 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 19 août 2008 - 19 août 2008 à 15:07
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/43999-formol-package-php5-de-gestion-de-formulaires-xhtml

cs_alterHD Messages postés 1 Date d'inscription mardi 19 août 2008 Statut Membre Dernière intervention 19 août 2008
19 août 2008 à 15:07
Bonjour,

Super, sauf que je ne comprends pas pourquoi formol génère automatiquement un id pour le formulaire ?

Enfin, voulant l'intégrer dans une page de Joomla(framework CMS), je me trouve embêter avec le système de gestion de session formol (qui doit rentrer en conflit avec celui de joomla :-((.
La même page en externe permet bien d'enregistrer les var de session

A suivre
tmaziere Messages postés 4 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 17 octobre 2007
17 oct. 2007 à 22:27
Re,

J'en profite pour vous redonner les exemples pour la nouvelle version :

- validateur "date" :

$field->registerValidator('date', 'vous devez entrer une date valide (jj/mm/aaaa)')
$field->registerValidator('date:fr2,-', 'vous devez entrer une date valide (jj-mm-aa)')
$field->registerValidator('date:eng4,.', 'vous devez entrer une date valide (mm.jj.aaaa)')

- plugin "fValidator", au sein de la vue/template/page :

$fValidator = $form->activatePlugin('fValidator');
echo $fValidator->getJavascript();

N'hésitez pas si vous souhaitez quelques précisions.
tmaziere Messages postés 4 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 17 octobre 2007
17 oct. 2007 à 22:12
Bonjour à tous,

Merci pour vos commentaires, sachez que je note vos meilleures suggestions pour les intégrer au fur et à mesure. La version 0.7.5 introduit un validateur "date" et un système de plugins, inauguré par un plugin pour fValidator (http://zend.lojcomm.com.br/fvalidator/) qui permet une élégante validation côté client (js). La classe fValidator (présente dans l'archive) et Mootools sont requis pour ce plugin.
N'hésitez à me dire ce que vous en pensez !

Bonne fin de semaine,
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
22 sept. 2007 à 13:06
Je n'ai pas encore eu l'occasion de tester ton package mais ça ne serait tarder. D'après ce que j'ai pu voir sur le site dédié à l'application, ça semble être du sacré bon boulot. Bravo à toi. Par contre, je regrette une chose que tu pourrais ajouter pour améliorer tout ça. A savoir une méthode pour ajouter une zone de texte Wysiwig (avec TinyMCE par contre) ainsi qu'un champ texte de type date sur lequel un calendrier javascript apparait lorsque l'on clique dedans. Voir ici pour un exemple :

http://calendar.swazz.org/

Ca rendrait encore plus parfaite ton application et les formulaires plus "user friendly".

++

PS : je mets 9/10 parceque tu n'as encore terminé ton appli ^^
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
20 sept. 2007 à 11:24
Salut, c'est re-moi

Bon, après quelques jours d'utilisation, voici quelques remarques (modification que j'ai du effectuer) :

- Implantation du javascript necessaire (pas pour la validation, pour n'importe quel effet graphique, que l'on souhaite avoir sur nos zolis champs de formulaire, ou pour l'utilisation de l'AJAX par exemple (verification de la disponibilité d'un pseudo, par exemple))

Exemple (a insérer dans le renderfield de inputtext) :

$jsString="";
if (isset($args['js']))
{
foreach ($args['js'] as $val => $option) {
$jsString .= " ".$val."=".$option." ";
}
}
return "_field->name."" id="".$this->_field->name.""$class value="".$this->_field->value.""".$jsString.$disabled.$maxlength." />\n";

l'utilisation serait alors la suivante :

$js = array ('onKeyUp'=>'"mafonctionJS();"');
echo $F->champ_texte->render(array("js"=>$js));;

et on aurait un peu de JS sur nos champs.
A faire pour les autres renderer aussi

- Possibilité de nommer nos formulaires lors de l'enregistrement en session (on peut avoir plusieurs formulaires par pages), mais également possibilité de désigner le formulaire a enregistrer : tu utilises self::$instance dans la fonction save, on pourrait faire un truc du genre :

public static function save(&$persistenceManager,$name="",$F="") {
if ($name=="")
$name = 'form';
if ($F=="")
$F = self::$instance;

if (is_array($persistenceManager)) {
$persistenceManager[$name] = $F;
return true;
} else if (is_object($persistenceManager)) {
$persistenceManager->form = $F;
return true;
} else {
throw new FormException("Wrong parameter type : must be array or object");
}

}

c'est ce que j'ai fait, ca marche très bien, même si c'est peut-être pas ultra propre. Ca nous permet de désigner quels sont les formulaires a enregistrer en variable de session.

Il y a quelques petites broutilles dont je ne me rapelle plus qui m'ont demandé un peu de retouche, sinon le reste est vraiment bien !

Et bien sur, des validators plus travaillés, mais c'était déja dans tes objectifs si j'ai bien compris.

Amuse toi bien :)

Bonne journée
tmaziere Messages postés 4 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 17 octobre 2007
10 sept. 2007 à 19:18
Bien vu, il faut effectivement modifier cette ligne en :

if (is_callable(array('self', $processor))) {

Ce bloc détermine si il existe une méthode de la classe FormManager qui correspond au 'preProcess' enregistré. Dans le cas contraire, il cherche une fonction accessible globalement. 'self' est un paramètre de is_callable.

Pour le javascript, c'est prévu. Je pencherais plutôt vers Mootools/fValidator (http://zend.lojcomm.com.br/fValidator/), qui est non obstrusif.

Pour l'email "contact", je fais le nécessaire. Merci pour ton retour et ces infos !
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
10 sept. 2007 à 12:57
Apres verification, c'est le form.manager.class.php qui pose problème, à la ligne 64.

foreach ($field->preProcessors as $processor){
if (is_callable(array(self, $processor))) {
$newValue = $this->$processor($newValue);
}
else if (is_callable($processor)) {
$newValue = $processor($newValue);
} else {
throw new FormException("Process unknown : '".htmlentities($processor)."'");
}
}

La ligne 64 étant la ligne : if (is_callable(array(self, $processor))) {

Le tableau semble poser probleme apparemment. Si on mets 'self' au lieu de self, l'erreur disparait, mais ca pose probleme non ? Ce n'est pas l'objet qui sera dans le tableau mais la chaine de caractere self ...
cs_zeguizmo Messages postés 138 Date d'inscription vendredi 1 août 2003 Statut Membre Dernière intervention 16 juillet 2009
10 sept. 2007 à 10:05
Salut,

Joli travail mais j'ai un petit souci. J'ai essayé de tester le formulaire d'inscription que tu proposes dans la FAQ, celui ci retourne une erreur lors de la validation :
Notice : Use of undefined constant self - assumed 'self'
Pointant sur la ligne : Form::free($_SESSION);

Je pense que c'est un truc du genre $array[toto] qui devrait etre transformé en $array['toto'] mais je ne vois absolument pas ou :/

De plus, dans les évolutions futures, la gestion des actions javascript sur les différents éléments du formulaire serait sympa (onfocus, onselect ..)

Merci à toi pour ton travail.
PS : contact@oeilduwake.com ne fonctionne pas.
tmaziere Messages postés 4 Date d'inscription dimanche 5 janvier 2003 Statut Membre Dernière intervention 17 octobre 2007
7 sept. 2007 à 19:10
Merci pour tes encouragements et tes critiques justifiées, j'en attendais pas moins ;)
Je rajoute tout ça à ma todo-list...

Pour les validateurs, on est d'accord, ce n'est qu'un début. J'indique comment en ajouter dans la FAQ du package.
De toute façon, je vais compléter "l'offre" pour la version suivante, en m'inspirant de formchecker, par exemple.

A+
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 sept. 2007 à 13:46
Hello,

c'est du joli travail.
Il y a 2-3 choses qui me chagrinent quand même (je n'ai pas tout exploré non plus): tu codes en PHP5, en utilisant pas trop mal ses possibilités (il y a même des itérateurs!), mais toutes tes comparaisons sont "loose" : au lieu de. C'est dommage.
Il y a quelques bouts de code inutiles (if (!is_null(self::$instance)) {self::$instance = null;} On ne rentre jamais dans cette condition).
Je préfère séparer les packages (validations, créations), mais ça, bon...
Enfin, à mon sens, il manque quelques éléments dans ton package de validation. Jette un oeil à mon code formchecker sur ce site, qui ressemble bcp à ta partie validation, il y a quelques ajouts par rapport aux possibilités que tu offres.

Mais bien sinon :-)