Je pensais à des masques binaires, par exemple
NOT_EMPTY = 2
NO_DIGIT = 4
NO_SPACE= 8
et ainsi de suite des puissances de 2.
Après pour savoir quels 'flags' sont présent, il te suffit de soustraire les puissances une à une, puisque chaque combinaison est unique. Par exemple,
NOT_EMPTY | NO_DIGIT = 6
tu enlèves les plus grandes d'abord:
* on peut pas enlever NO_SPACE à 6 => NO_SPACE est absent
* on peut enlever NO_DIGIT à 6 => NO_DIGIT présent
* on peut enlever NOT_EMPTY à 2 => NOT_EMPTY est présent
bref tu as compris, sinon masque binaire sur google
Je dois étudier cette solution, je ne l'ai jamais utilisée. Elle me paraît efficace, et sera une alternative à ce qui existe déjà.
Ben je parlais de remplacer
toute la page HTML par un appel à une fonction comme echoHTML(). En fait, dans la conception de ta classe, le truc bancal, c'est que certains aspects graphiques sont présent dans la classe justement, et d'autres sont dans le html. Pourquoi ne pas faire tout d'un coup, et en profiter pour mieux dissocier ce qui est graphique du reste dans la construction des champs du formulaire?
Peut-être, comme tu le dis, une sur-couche permettrait d'obtenir ce résultat.. En tout cas, je serais le premier à utiliser ton outil s'il m'économise du code
Le but, pour moi, est de créer un utilitaire de construction de formulaires, évolutif et simple. Je veux permettre à l'utilisateur de placer les éléments comme il le veut, et je n'interviens que sur les balises de formulaires, avec un rendu en xhtml 1.0 strict.
Si le type veut faire un tableau pour placer ses éléments (ça peut arriver, et ça m'arrive), il utilise un tableau. S'il veut tout négocier en css, c'est possible aussi.
L'intérêt de ce package, c'est qu'il est indépendant de tout autre package, donc extrêmement portatif.
Je ne sais pas si je réponds bien à ta question, pour l'instant, je me limite aux formulaires, et n'agis pas sur la page de l'utilisateur.
Pour info, j'ai actuellement deux utilisateurs débutants en php (aucune notion d'objet), qui se sont appropriés les FormTools très rapidement, en me posant peu de questions. L'un d'eux construit un site avec leur aide, et tous ses formulaires passent correctement, avec contrôles de saisie etc ...
De plus, je fais des contrôles de sécurité "anti-piratage" (exemple : empêcher l'utilisateur de mettre une valeur non prévue dans un select, avec la méthode $select->TestOriginalList() );
Pourrais-tu te placer par rapport à PEAR/QuickForm ?
J'ai parcouru la doc de QuickForm, je ne connaissais pas. Pour info, à l'origine, les formtools faisaient partie d'un projet d'étude, et de mon envie d'apprendre plus sur la programmation orientée objets (très efficace, puisqu'utilisation d'héritages, et d'agrégations ...).
Bref, pour quickform, je n'ai pas aimé le système. Peu évolutif, à mon sens, il ne traite pas les champs de formulaire comme des objets.
De mon côté, je traite chaque champ comme un nouvel objet, ce qui a de gros côtés pratiques, notamment dans les cas de boutons radio et de champs texte :
Radio :
J'utilise deux classes : RadioInGroup représente un groupe de boutons radios, et est composé de boutons radios. En matière de validation, c'est très pratique, puisque l'appel à une seule méthode sur le groupe de boutons oblige l'utilisateur à en cocher au moins un. Un groupe de boutons radio devient un champ de formulaires.
Text :
TextIn est une classe (au début, c'était pour TextInput, finalement, j'ai mis le "in" à tous les champs de formulaire). Elle peut être étendue, et c'est tout son intérêt. Je prends l'exemple fourni sur pear/quickform à cette adresse :
http://php.developpez.com/cours/pear/ht ... UAAAAe17IF
Dans le cas d'un champ de login, vous créez la classe TextInLogin, elle étend la classe TextIn, il faut lui créer une méthode CheckLogin() et l'appeler à l'instance ou obliger l'utilisateur à la paramétrer, et ça devient un champ de formulaire à part entière.
Ca fera en plus une contribution ...
Pear/quickform a certainement plus de fonctionnalités, et est plus mature. L'outil que je propose n'apporte peut être rien du tout par rapport à pear, je n'en sais rien, et je préfère ne pas me poser la question. Utilisez le si vous en avez envie, modifiez le à souhait, je ne sais même pas si j'ai envie de le mettre sous licence.
J'espère avoir bien compris vos questions, et y avoir répondu.
Mathieu.