Salut à tous,
je suis nouveau sur php, et par la même occasion sur ZF (c'est ma 2ème semaine), donc indulgence si je dis des grosses boulettes (je viens du mon de Java, et ai quelques notions de MVC)
J'ai regardé les messages du forum, mais je n'ai pas trouvé le problème que je rencontre.
Mon but est de faire un formulaire (de 6 champs + 6 label), dans un tableau, sur 2 lignes (3 input + labels par ligne), les labels étant alignés à droite, et les input à gauche. Ceci est fait en utilisant 2 subForm, dont chacun d'eux possède un decorator qui l'entoure d'un <tr>.
Ci dessous mon code actuel, légèrement nettoyé pour des questions de lisibilité :
Mon problème se situe au niveau des labels. Je souhaiterais que le td qui les entoure soit déclaré avec une classe css, 'labelTd'. Cela marche très bien pour le <td> contenant le input (class 'inputTd'). En gros, c'est pour aligner les labels à droite, et aligner les input à gauche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 <?php class PersonneForm extends Zend_Form { public function __construct($options = null) { parent :: __construct($options); $this->setName('personne'); $this->setDecorators(array( 'FormElements', array('HtmlTag', array('tag' => "table")), 'Form' )); /************************************** INPUT TEXT : CIVILITE **************************************/ $selectcivilite = new Zend_Form_Element_Select('civilite'); ... Les 5 autres inputs + les boutons submit et annuler ... $subForm1 = new Zend_Form_SubForm(); $this->addSubForm($subForm1, 'subform1'); $subForm2 = new Zend_Form_SubForm(); $this->addSubForm($subForm2, 'subform2'); /************************************** DECORATOR : permet de mettre un <tr></tr> pour regrouper plusieurs champs **************************************/ $this->setSubFormDecorators(array( 'FormElements', array(array('tr' => 'HtmlTag'), array('tag' => "tr")), )); /************************************** AJOUT DES INPUT AU FORMULAIRE **************************************/ // Les 3 champs sur la première ligne $subForm1->addElements(array ( $selectcivilite, $nom, $prenom, )); // Les 3 champs suivants sur la 2ème ligne $subForm2->addElements(array ( $dateNaissance, $lieuNaissance, $nationalite, )); /************************************** DOIT SE FAIRE APRES LA DECLARATION DES FORM ELEMENT **************************************/ $inpuDecorator = (array( 'ViewHelper', 'Errors', array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'inputTd', 'style' => 'text-align: left')), array(array('data2' => 'Label'), array('tag' => 'td', 'class' => 'labelTd')), )); $subForm1->setElementDecorators($inpuDecorator); $subForm2->setElementDecorators($inpuDecorator); } }
Malheureusement, je ne comprends pas pourquoi les deux lignes suivantes qui sont strictement les mêmes, ne fonctionnent pas dans les deux cas.
Plutôt que de partir dans la description du problème qui risque de ne pas être clair, voici le code html pondu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'inputTd', 'style' => 'text-align: left')), array(array('data2' => 'Label'), array('tag' => 'td', 'class' => 'labelTd')),
La classe css 'inputTd' vient bien se positionner sur le <td> alors que 'labelTd' (déclaré de la même façon, et c'est peut-être ça le problème) vient se positionner sur l'élément label, et pas sur le td. Donc mon text-align: right n'a aucun effet car doit être sur un td
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <form id="personne" enctype="application/x-www-form-urlencoded" action="" method="post"><table> <tr> <td><label for="subform1-civilite" class="labelTd optional">Civilité *</label></td> <td class="inputTd" style="text-align: left"> <select name="subform1[civilite]" id="subform1-civilite"> <option value="1" label="Madameuh">Madameuh</option> <option value="2" label="Mademoiselle">Mademoiselle</option> <option value="3" label="Monsieur">Monsieur</option> </select></td> <td><label for="subform1-nom" class="labelTd optional">Nom *</label></td> <td class="inputTd" style="text-align: left"> <input type="text" name="subform1[nom]" id="subform1-nom" value=""></td> <td><label for="subform1-prenom" class="labelTd optional">Prénom *</label></td> <td class="inputTd" style="text-align: left"> <input type="text" name="subform1[prenom]" id="subform1-prenom" value=""></td></tr> <tr> <td><label for="subform2-dateNaissance" class="labelTd optional">Date de naissance *</label></td> <td class="inputTd" style="text-align: left"> <input type="text" name="subform2[dateNaissance]" id="subform2-dateNaissance" value=""></td> <td><label for="subform2-lieuNaissance" class="labelTd optional">Lieu de naissance</label></td> <td class="inputTd" style="text-align: left"> <input type="text" name="subform2[lieuNaissance]" id="subform2-lieuNaissance" value=""></td> <td><label for="subform2-nationalite" class="labelTd optional">Nationalité</label></td> <td class="inputTd" style="text-align: left"> <input type="text" name="subform2[nationalite]" id="subform2-nationalite" value=""></td></tr></table></form>
quelqu'un aurait une idée, ou a déjà rencontré ce problème ?
Merchi !
Edit : apparemment, cela vient d'une différence d'implémentation de l'array options entre HtmlTag.php et Label.php. L'un prend l'option ['class'] et la met sur le ['tag'] c'est le cas de HtmlTag, mais la classe Label prend cette ['class'] et la met de toute façon sur la balise <label> et non pas sur l'éventuel tag entourant.
Ma question reste donc d'actualité et est-ce possible ?
Partager