Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
Cela fait peu de temps je me suis mis à étudier le Framework de Zend. Certaines notions m'échappent encore.
L'une d'entre elles concerne l'affichage d'une légende à un Fieldset.
En fait, j'ai codé un formulaire de connexion classique mais la légende ne s'affiche pas.
Voici le code de mon formulaire qui contient 2 champs texte et un bouton :
// Nom de l'utilisateur $user = new Zend_Form_Element_Text('user'); $user->setLabel('Nom de l\'utilisateur'); $user->addFilter('StripTags'); $user->addFilter('StringTrim'); $user->addValidator('NotEmpty'); $user->setRequired(true); // Libelle du marqueur $password = new Zend_Form_Element_Text('password'); $password->setLabel('Mot de passe'); $password->addFilter('StripTags'); $password->addFilter('StringTrim'); $password->addValidator('NotEmpty'); $password->setRequired(true); // Bouton de validation $valider = new Zend_Form_Element_Submit('valider'); $valider->setLabel('Connexion'); $valider->setAttrib('id', 'boutonvalider');
Voici maintenant les 3 méthodes que j'ai testé pour mettre ces 3 éléméments dans un fieldset :
/* Première méthode */ //$login = new Zend_Form_SubForm(array('legend' => 'Connexion à Completude')); //$login->addDecorator(new Zend_Form_Decorator_Fieldset()); //$login->addElements(array($user, $password, $valider)); //$this->addSubForm($login, 'required'); /* Seconde méthode */ //$this->addElements(array($user, $password, $valider)); //$this->clearDecorators(); //$this->addDecorator('FormElements') //->addDecorator('Fieldset', array('legend' => 'Connexion à Completude')) //->addDecorator('Form'); /* Troisième méthode */ $deco = new Zend_Form_Decorator_Fieldset(); $deco->setLegend('Connexion à Completude'); $this->addDisplayGroup(array($user, $password, $valider), 'display'); $this->clearDecorators(); $this->setDisplayGroupDecorators(array('FormElements', $deco));
Quelque soit l'une de ces 3 méthodes, mes 3 éléments sont bien stockés dans un fieldset, mais la légende n'apparait pas.
Si quelqu'un a une solution à proposer... Je suis preneur
A bientôt
Hors ligne
J'ai utilisé une variante de ta troisième méthode :
# $this est une instance d'une sous-classe de Zend_Form $this->addDisplayGroup( array('frontCover', 'backCover'), 'covers' ); $this->getDisplayGroup('covers')->setLegend('Couvertures');
Mais à la réflexion la méthode la plus propre c'est de configurer le contenu de la légende directement sur
le décorateur fieldset un peu comme ta deuxième méthode.
Par contre je ne pense pas que tu aies besoin de changer les décorateurs par défaut (d'autant que tu as oublié
je crois le décorateur qui entoure les éléments dans un dl) du formulaire. Avec un :
$this->getDecorator('Fieldset')->setLegend('ma légende');
est-ce que ça marche ?
J'ai regardé le code de Zend_Form_Decorator_Fieldset et ta deuxième méthode devrait tout de même fonctionner ?...
Frédéric
Hors ligne
Pages: 1