Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je dois créer un formulaire en 5 etapes qui doit slide à chaque fois que l'on click "suivant" donc le forum doit etre integré dans une seule page mais il doit être dynamique.
j'ai cherche des exemples ou tutoriaux sur le net pour m'aide à le réalise mais ils sont tous trop vieux donc non compatible avec la version de Zend actuel.
J'ai bien compris qu'il fallait que je crée mon formulaire avec des subform pour l'afficher dynamiquement, mais la doc de Zend est tellement pauvre que je n'y comprend rien.
Je n'ai trouvé aucun exemple récent de création de multi forms, quelqu'un pourrait il m'aiguiller ?
Merci bonne journée
Dernière modification par senayar2 (27-08-2010 16:58:18)
Hors ligne
Bonjour,
De ce que j'ai vu au cours de mes tests :
- si un "<form>" contient d'autres "<form>" seul le form contenant la zone de saisie ou le bouton entrainant la validation du formulaire sera envoyé au serveur.
- les "subform" du zend framework ont un décorateur qui rajoute une balise "<form>" autour de chaque sous formulaire
A partir de là, j'en ai conclus plusieurs choses :
1) les sous formulaires ne sont utilisable tel quel que si on veut afficher des formulaires successif dans des pages successives (donc avec rechargement de la page entre chacun) mais avec une validation finale qui dira si tout est bon dans tous les sous formulaires
2) si on veut tout afficher en une fois (sans recharger la page) sans enlever le "<form>" du sous formulaire alors il faudra obligatoirement du javascript pour l'envoie du formulaire (sans ça, il manquera des données)
3) si on enlève le décorateur "<form>" des sous formulaires et qu'on en met un autre dont le but est de créer le bloc qui sera tout à tour affiché et caché alors on peut se passer du javascript pour la validation du formulaire à condition de tout afficher au départ et ne cacher les pages que par javascript.
J'espère que mes maigres informations seront suffisante pour trouver une solution qui te convienne.
Hors ligne
Bonjour,
Effectivement je suis assez d'accord, la doc n'est pas très clair sur les SubForms...
La partie qui t'intéresse est là :
http://framework.zend.com/manual/fr/zen … .multiPage
Pour ma part j'ai fais cela avec du JavaScript pour la validation partiel de chaque subform :
création du formulaire :
class Form_MonFormulaire exends Zend_form { public function init() { $part1 = new Zend_Form_SubForm(); $part1->addElement(array(mes_elements)); $part2 = new Zend_Form_SubForm(); $part2->addElement(array(mes_elements)); .........etc } }
controleur :
... public function init() { $cS = $this->_helper->getHelper('contextSwitch'); $cS->addActionContext('partialvalidation', 'json') ->initContext(); } public function formulaireAction() { $form = new Form_MonFormulaire() $this->view->formulaire = $form; } public function partialvalidationAction() { $form = new Form_MonFormulaire() if($form->isValidPartial($this->_getAllParams)){ $this->view->valid = true; }else{ $this->view->valid = false; $this->view->message = $for->getMesages(); } } ...
formulaire.js avec Jquery:
$(function(){ $('#id_du_bouton_suivant').click(function(){ var data = {'format' : 'json'}; $('.part1 input').each(function(){ data[$(this).attr('name')] = $(this).val(); }); $.post('/moncontrolleru/partialvalidation', data, function(rep){ if(rep['valid']){ // Hide part1 & display Part2 ...etc }else{ // display message } }, 'json'); }); });
dans le dernier subform tu y met le Submit et tu fais une validation classique dans l'action "formulaire".
Il est important de déclarer le contexte switch dans l'init du contrôleur car c'est lui qui va désactiver les aides de vue (layout / render) et retourner tes variable au format json.
Je pense qu'il y a d'autres manières de faire mais dans mon cas j'ai adopter celle ci.
Dede
Hors ligne
merci pour vos réponses je posterai mon code final pour les intéressés, merci bien
Hors ligne