Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-05-2011 16:33:24

CDuv
Nouveau membre
Date d'inscription: 04-05-2011
Messages: 6

[Zend_Form] Rajouter des champs dynamiquement en JavaScript

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) :

Code:

[
  [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 :

Code:

[
  [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

 

#2 04-05-2011 19:45:20

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: [Zend_Form] Rajouter des champs dynamiquement en JavaScript

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


Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

#3 05-05-2011 10:50:02

CDuv
Nouveau membre
Date d'inscription: 04-05-2011
Messages: 6

Re: [Zend_Form] Rajouter des champs dynamiquement en JavaScript

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

 

#4 05-05-2011 19:24:55

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: [Zend_Form] Rajouter des champs dynamiquement en JavaScript

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 +


Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

#5 06-05-2011 09:38:47

Ithier
Membre
Date d'inscription: 05-01-2010
Messages: 85

Re: [Zend_Form] Rajouter des champs dynamiquement en JavaScript

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

 

#6 06-05-2011 09:57:46

shadypierre
Membre
Date d'inscription: 24-03-2010
Messages: 617

Re: [Zend_Form] Rajouter des champs dynamiquement en JavaScript

Hors ligne

 

#7 06-05-2011 11:12:15

CDuv
Nouveau membre
Date d'inscription: 04-05-2011
Messages: 6

Re: [Zend_Form] Rajouter des champs dynamiquement en JavaScript

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 smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages