Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Soit un formulaire Zend_Form quelconque (3 Form_Element_Text, un Form_Element_Submit, etc..).
A l'affichage de celui-ci (par le navigateur), il faudrait qu'il soit possible d'ajouter, d'un clic (sur un bouton ou un lien ou une image, peu importe) un menu déroulant (<select>) et 1 case à cocher (<input type="checkbox" />) et ceci autant de fois que le bouton/lien/image est cliqué.
On peut symboliser les champs du formulaire comme suit (la valeur de l'attribut HTML "name" est le texte entre crochets):
[
[nom] = "xxx"
[prenom] = "yyy"
[email]= "zzz"
[submit] = "OK"
]
Avec les champs additionnels cela pourrait être (dites-moi si je me trompe) :
[ [nom] = "xxx" [prenom] = "yyy" [email]= "zzz" [submit] = "OK" [langues] = [ [0] = [ [langue] = "fr" [maternelle] = "1" ] [1] = [ [langue] = "en" [maternelle] = "1" ] [2] = [ [langue] = "es" [maternelle] = "0" ] [...] ] ]
Ou alors :
[ [nom] = "xxx" [prenom] = "yyy" [email]= "zzz" [submit] = "OK" [langue] = [ [0] = "fr" [1] = "en" [2] = "es" ] [maternelle] = [ [0] = "1" [1] = "1" [2] = "0" ] ]
Mais je pense que la première version est plus propre et surtout plus compatible avec celle induite par l'utilisation des Zend_Form_SubForm.
Mais voila, je recherche la bonne façon de faire cela.
Je sais qu'il va me falloir du JavaScript mais il est hors de question de perdre les fonctionnalités Zend_Form (validateurs, filtres) sur ces champs.
Cas A :
Si je conçois, avant l'affichage, mon Zend_Form avec les 3 champs textes, puis que je demande à JavaScript d'ajouter au DOM le code HTML du select et de la checkbox, ces derniers n'existeront pas dans l'objet Zend_Form une fois dans le Controller appelé par la soumission du formulaire : et donc pas de validateurs/filtres possibles.
Zend_Form sans champs additionnels -> affichage -> ajout HTML dans DOM par JS -> soumission -> Zend_Form sans champs additionnels
Solutions possibles aux problèmes du cas A :
Dans le Controller cible de la soumission, avant toute validation du formulaire, je regarde l'objet Zend_Controller_Request_Http et compte le nombre de valeurs dans "langues", et rajoute automatiquement autant de champs qu'il faut à mon Zend_Form.
Reste la question de comment faire pour générer l'HTML des Zend_Form_Element en JavaScript ?
Cas B :
Si je rajoute le select et la checkbox au Zend_Form avant l'affichage (dans le Controller par exemple), je perds la capacité d'ajout illimité des 2 champs additionnels.
Zend_Form avec une fois les champs additionnels -> affichage -> soumission -> Zend_Form avec une fois les champs additionnels
Solutions possibles aux problèmes du cas B :
Se limiter à disons 50 nouveaux couple de champs et les créer dès le début dans le Zend_Form en les masquant au visiteur par une directive CSS que je retire en JavaScript lors du clic sur le bouton d'ajout.
Je me dit, qu'en 2011, il doit bien exister une façon de faire cela, proprement avec Zend : Dojo ?
Merci
Dernière modification par CDuv (04-05-2011 18:15:35)
Hors ligne
perso,
j'ai été confronté au cas pour finir (temporairement) j'ai simplement fait une requête ajax (json) de création du form + ajout d'une clef en session pour ce formulaire
Hors ligne
Si tu es passé par de l'AJAX c'est que ton système gère des paramètre pour choisir les champs à créer (genre createFormElements.php?name[]=mytext&type[]=text&name[]=perms&type[]=select&name[]=active&type[]=checkbox) ?
Hors ligne
disons que je ne doit généré que certains champs donc je lui dit donne le mois le champs qui correspond a cela, qui a tel nom et encore un truc.
les champs sont ajouter un par un, via un clique sur un +
Hors ligne
Voici un article http://www.jeremykendall.net/2009/01/19 … zend-form/ que j'ai trouvé par hasard mais que je n'ai pas encore lu en détail ni mis en application.
Vu le titre cela semble correspondre à ton besoin. Peux-être que cela te donnera des idées.
Hors ligne
Hors ligne
Ithier a écrit:
Voici un article http://www.jeremykendall.net/2009/01/19 … zend-form/ que j'ai trouvé par hasard mais que je n'ai pas encore lu en détail ni mis en application.
Vu le titre cela semble correspondre à ton besoin. Peux-être que cela te donnera des idées.
C'est en effet assez proche, avec notamment une solution pour l'ajout à la volée des Form_Element après la soumission (fonction preValidation()) mais j'estime que pour la résolution de ce problème, l'AJAX est totalement inutile, du coup il me manque un bout
Hors ligne
Pages: 1