Bonjour à tous,
Comme beaucoup, je galère au niveau des décorators de formulaire...
Je sais pas pourquoi, mais pour plus de lisibilité, j'aimerais créer un truc du genre :
(J'ai enlevé certain élément mais globalement ça ressemble à ça).
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 <form enctype="multipart/form-data" method="post" action=""> <fieldset> <legend>Informations personelles</legend> <label>Nom : <input type="text"></label> <label>Email : <input type="text"></label> </fieldset> <fieldset> <legend>Localisation</legend> <label>Région : <select name="regionVehicule" id="regionVehicule" helper="formSelect"> <option value="0" label=""></option> <option value="1" label="Alsace">Alsace</option> <option value="2" label="Aquitaine">Aquitaine</option> <option value="3" label="Auvergne">Auvergne</option> <option value="4" label="Basse Normandie">Basse Normandie</option> </select> </label> <label>Département : <select name="departementVehicule" id="departementVehicule" helper="formSelect" disabled="disabled"> <option value="0" label=""></option> </select> </label> </fieldset> <input type="submit" name="Envoyer" id="Envoyer" value="Envoyer"> </form>
J'aimerais créer des décorateurs simple pour pouvoir les transformer rapidement (mon intégrateur me demande souvent d'ajouter une class sur un label ou un input par exemple, il faut que cela reste simple...)
J'ai déjà dérivé mes élements (Text, File, Select, Submit)
Et ainsi créé un décorateur FormVide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php class App_Form_Element_Text extends Zend_Form_Element_Text { public function __construct($spec, $options = null) { parent::__construct($spec, $options = null); $this->clearDecorators(); $decorator = new App_Form_Decorator_FormVide(); $this->addDecorator($decorator); } }
Mais impossible de faire la même chose pour le type File par exemple. Donc je me demande si je suis sur la bonne voix.
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 <?php /* * Sort un formulaire au format : * <label class="obligatoire"> Label : <input type="text" name="label" /></label> */ class App_Form_Decorator_FormVide extends Zend_Form_Decorator_Abstract { public function buildInput() { $element = $this->getElement(); $helper = $element->helper; return $element->getView()->$helper($element->getName(), $element->getValue(), $element->getAttribs(), $element->options); } public function buildLabel() { $element = $this->getElement(); $label = $element->getLabel(); $class = ""; if($element->isRequired()) $class='class="obligatoire"'; return "<label ".$class.">".$label.$this->buildInput()."</label>"; } public function buildErrors() { $element = $this->getElement(); $messages = $element->getMessages(); $retour = ""; if(empty($messages)) return; foreach($messages as $message) { $retour .= $message."<br />"; } return $retour; } public function buildDescription() { return; } public function render($content) { $label = $this->buildLabel(); $errors = $this->buildErrors(); $description = $this->buildDescription(); return $content.$label.$errors.$description; } }
Merci d'avance !
Partager