Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
J'ai plusieurs questions quant à la personnalisation de Zend_Form :
1 - Mise en forme en tableau d'une Form
Comment faire pour avoir la mise en forme
<form....> <table> <tr> <td><label.... </td><td><input.... </td> </tr> <tr> <td><label.... </td><td><input.... </td> </tr> ..... </table> </form>
2- Comment créer des une mise en forme de ce type là ?
<div><h2>Titre 1</h2></div> <div> ici Subform1 ou displaygroup1</div> <div> Contenu quelconque</div> <div><h2>Titre 2</h2></div> <div> ici Subform2 ou displaygroup2</div>
3- Comment créer un bouton 'Reset' pour remettre à zéro le contenu d'un formulaire?
Merci
Hors ligne
dérive Zend_Form
Hors ligne
Merci
Si c'était des maths, je saurais le faire sans difficulté. Par contre la POO n'est pas mon point fort.
Peux-tu stp m'aider avec des exemples concrets avec des morceaux de codes?
Merci encore
Dernière modification par ziedb (22-12-2008 08:42:20)
Hors ligne
Bonne Année
J'espère que vos idées sont bien rafraichies!!!
Quelqu'un peut m'aider?
Hors ligne
Salut,
Pour faire une disposition en tableau :
$form->setDecorators(array( 'FormElements', array('HtmlTag', array('tag' => 'table')), 'Form', )); $form->setElementDecorators(array( 'ViewHelper', 'Errors', array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element')), array('Label', array('tag' => 'th', 'class' => 'header')), array(array('row' => 'HtmlTag'), array('tag' => 'tr')), )); $form->submit->setDecorators(array( array('decorator' => 'ViewHelper', 'options' => array('helper' => 'formSubmit')), array('decorator' => array('td' => 'HtmlTag'), 'options' => array('tag' => 'td', 'colspan' => 2)), array('decorator' => array('tr' => 'HtmlTag'), 'options' => array('tag' => 'tr')), ));
Et pour faire un affichage personnalisé, passe ton instance de Zend_Form a cette fonction :
public function getFormModeWrite(Zend_Form $form) { $array = array(); $array['action'] = $form->getAction(); $array['method'] = $form->getMethod(); foreach ( $form->getElements() as $element ) { $element->removeDecorator('HtmlTag'); $element->removeDecorator('Label'); $array[$element->getName()]['label'] = $element->getLabel(); $array[$element->getName()]['element'] = $element; } return $array; }
Et ensuite dans ta vue tu pourras utiliser ton form ainsi :
<tr> <th><?php echo $this->form["email"]["label"]; ?></th> <td><?php echo $this->form["email"]["element"]; ?></td> </tr> <tr> <td colspan="2"> </td> </tr> <tr> <th><?php echo $this->form["subject"]["label"]; ?></th> <td><?php echo $this->form["subject"]["element"]; ?></td> </tr>
Pour créer un bouton Reset, tu peux le faire de la même manière que pour un bouton Submit :
$button = $form->createElement("reset", "button_name"); $button->setIgnore(true) ->setLabel("Rétablir");
Ou instancier Zend_Form_Element_Reset.
Voilà j'espère que cela t'aidera
Enfin, tous ces codes proviennent de ce forum ou de la doc officielle, donc je te conseille de chercher un peu (plus) et tu trouveras certainement ce que tu cherches.
Dernière modification par acharrex (02-01-2009 12:47:21)
Hors ligne
Merci
Y'a-t-il un moyen d'encapsuler tout ça dans ma classe 'MyForm' sans avoir à intervenir au niveau du contrôleur et de la vue?
Hors ligne
Pour les points 1 et 3, tout se passe dans ton modèle (donc dans ta classe "MyForm"), mais pour le point 2 tu seras obligé de retoucher ta vue à moins que les Decorators répondent à tes besoins.
Dernière modification par acharrex (02-01-2009 13:10:55)
Hors ligne
Merci
Pour le point1, j'ai essayé d'intégrer la première partie du code (là où il y a $form->setDecorators...) dans ma méthode __construct() de ma classe Myform (là où je définis mes éléments). Il n'y que le tag <table> qui est pris en considération. Les éléments continuent à être affichés avec les tag <dt> et <dd>.
Pour le point 3, ma question n'est peut être pas claire. Je sais comment ajouter un deuxième bouton reset mais la question est : Comment connaitre lequel des boutons à été utilisé pour effectuer le traitement correspondant?
Dernière modification par ziedb (02-01-2009 13:33:18)
Hors ligne
Est-ce que tu fais un "setElementDecorators" ailleurs ?
Pour le point 3, si tu as deux boutons Reset il faut les nommer différemment et tester le onclick en Javascript. Si tu n'en as qu'un seul, à quoi bon savoir s'il a été cliqué ou non ?
Hors ligne
Est-ce que tu fais un "setElementDecorators" ailleurs ? =>Non
Pour le point 3, c'est réglé : $this->_hasparam('nomdusubmit');
Hors ligne
Bonjour,
la méthode getFormModeWrite est vraiment bien et permet de disposer les choses un peu comme on veut...
Mais les décorateurs pour obtenir un tableau, j'ai beau essayer dans tous les sens, mais comme Ziedb, je n'obtiens pas quelque chose de correct.
Sais-tu où obtenir un source complet de formulaire, même un tout petit formulaire avec l'utilisation des bons décorateurs...
Merci.
Hors ligne
En fait ce code fonctionnait avec le ZF 1.6 mais plus avec le ZF 1.7. Bizarre.
Hors ligne
Pages: 1