Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'aurais besoin d'aide avec un formulaire...
Je vous explique : j'ai besoin de ce résultat pour que jQuery affiche des onglets :
<form ...> <div id="tabs-1"> <label>test</label> <input type... /> <br /> <label>test</label> <input type... /> </div> <div id="tabs-2"> <label>test</label> <input type... /> <br /> <label>test</label> <input type... /> </div> <input type="submit" />
Moi pour faire les formulaires j'utilise cette syntaxe :
class FormTest extends Zend_Form{ public function init(){ $element = new Zend_Form_Element_Text('name'); $element->setLabel('Name :'); $this->addElement($element); $element = new Zend_Form_Element_Text('name2'); $element->setLabel('Name2 :'); $this->addElement($element); $submit = new Zend_Form_Element_Submit('submit'); $this->addElement($submit); $this->submit->setValue("Save"); } }
J'aimerais savoir s'il existe un truc du genre :
$form->addStatic('<div id='tabs-1'>');
Merci d'avance
Dernière modification par Vincent (08-07-2009 12:53:47)
Hors ligne
utilise le décorateur htmlTag
(et lit la doc)
Hors ligne
J'ai beaucoup cherché mais je n'arrive pas à obtenir ce que je veux avec HtmlTag
Quand je fais cela :
$element->setDecorators( array( 'ViewHelper', 'Label', array('HtmlTag', array('tag' => 'div', 'class' => 'formElementContent')), array('HtmlTag', array('tag' => 'div', 'id' => 'tabs-1', 'openOnly' => true)) ) );
J'obtiens ça :
<div id="tabs-1"> <label for="name" class="optional">Name :</label> <input type="text" name="name" id="name" value="">
Je ne comprends pas pourquoi je n'ai pas un autre div qui contient les elements du formulaire... cela devrait donner :
<div id="tabs-1"> <div class="formElementContent"> <label for="name" class="optional">Name :</label> <input type="text" name="name" id="name" value=""> </div>
Est ce qu'on ne peux pas imbriquer des divs ?
Hors ligne
Hello,
Si je me rappelles bien, c'est parce que tu ne les nommes pas donc le 2ème écrase le 1er
A+
Hors ligne
Ca ne marche pas !
J'ai ajouté un id à la div mais cela ne change rien
$element->setDecorators( array( 'ViewHelper', 'Label', array('HtmlTag', array('tag' => 'div', 'id' => 'test', 'class' => 'formElementContent')), array('HtmlTag', array('tag' => 'div', 'id' => 'tabs-1', 'openOnly' => true)) ) );
Tant qu'on y est... vous pouvez me dire aussi à quoi ça sert l'option "placement" ?
Dernière modification par asnodj (08-07-2009 09:57:49)
Hors ligne
Hello,
Pour moi nommé ne voulait pas dire "id".
$element->setDecorators( array( 'ViewHelper', 'Label', array(array('mon_tag_1' => 'HtmlTag'), array('tag' => 'div', 'id' => 'test', 'class' => 'formElementContent')), array(array('mon_tag_2' => 'HtmlTag'), array('tag' => 'div', 'id' => 'tabs-1', 'openOnly' => true)) ) );
C'est dans la doc : http://framework.zend.com/manual/fr/zen … decorators (note : "Using Multiple Decorators of the Same Type", un peu plus bas)
A+
Hors ligne
Merci mikaelkael
Finalement j'ai opté pour créer un fichier .phtml pour l'affichage des elements. Cà marche comme tu as dis les HtmlTag mais j'ai encore rencontrai un problème quand j'ai voulu que le label et l'élément soient chacun contenu par un div et que ces deux divs soient au même niveau...
Voici le code du fichier form_decorator.phtml (script à placer dans views/scripts/)
<div class="formElementContent"> <div class="FEC_label"> <?php $attribs = $this->element->getAttribs(); if($attribs['helper'] != 'formSubmit'){ $label = $this->element->getLabel(); if ($this->element->isRequired()) { $attribs['escape'] = false; $label = $this->escape($label). ' <span class="required">*</span>'; } echo $this->formLabel($this->element->getName(), $label, $attribs); } ?> </div> <div class="FEC_element"> <?=$this->content;?> </div> <?php // Erreurs if ($this->element->getMessages()) { ?> <div class="FEC_errors"> <?=implode('<br />', $this->element->getMessages())?> </div> <?php } // Description ?> <div class="hint"><?= $this->element->getDescription() ?></div> </div>
Maintenant je fais cela pour les décorateurs des elements du formulaire :
$element->setDecorators( array( 'ViewHelper', array('ViewScript', array('viewScript' => 'form_decorator.phtml', 'placement' => false)), ) );
J'ai fini par créer moi même la methode addStatic du formulaire :
class FormTest extends Zend_Form{ var $statics_count = 0; private function addStatic($S_static){ $element = new Zend_Form_Element_Static('static'.$this->statics_count); $this->statics_count++; $element->setValue($S_static); $this->addElement($element); }
Comme tu pourras voir j'ai créé l'élément Static pour le formulaire :
class Zend_Form_Element_Static extends Zend_Form_Element{ public function render(){ return $this->_value; } }
Voilà ! Maintenant dans le formulaire je n'ai qu'appeler la fonction addStatic('test !'); et le tour est joué.
Je trouve cela plus aise à utiliser.
Merci beaucoup de votre aide à vous deux.
Hors ligne
Je up car j'ai un problème avec ma méthode addStatic. Quand il y a des problèmes et que le formulaire n'est pas validé on ne voit plus les éléments statiques :s
J'arrive pas à trouver pourquoi il a ce comportement.. est ce que quelqu'un peut m'aider à optimiser mon élément "Zend_Form_Element_Static" ?
Hors ligne
Je viens de trouver! Apparemment il y a un problème lors de la validation du formulaire et du coup les champs n'étaient pas affichés.
problème de decorateurs ????
En tout cas j'ai modifié mon "Zend_Form_Element_Static" comme suit :
class Zend_Form_Element_Static extends Zend_Form_Element{ public function render(){ return $this->_value; } public function isValid($value, $context = null){ return true; } }
et cela marche nikel !
Si quelqu'un peut mieux expliquer ce serait cool
Aller bye, j'espère que cela serve à quelqu'un
Hors ligne