salut,
voilà, j'ai créer ma propre classe décorateur, et j'ai un problème avec les input type "submit", ""button" ...
le pb est que le libelle apparait a ccoté du bouton et non sur le bouton.

voici ma class :
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
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
class My_Decorateur_Table extends Zend_Form_Decorator_Abstract
{
    public function buildLabel()
    {
        $element = $this->getElement();
        $label = $element->getLabel();
        if ($translator = $element->getTranslator()) {
            $label = $translator->translate($label);
        }
        if ($element->isRequired()) {
            $label .= '*';
        }
        $label .= ' : ';
        return $element->getView()
                       ->formLabel($element->getName(), $label);
    }
 
    public function buildInput()
    {
        $element = $this->getElement();
        $helper  = $element->helper;
        return $element->getView()->$helper(
            $element->getName(),
            $element->getValue(),
            $element->getAttribs(),
            $element->options
        );
    }
 
    public function buildErrors()
    {
        $element  = $this->getElement();
        $messages = $element->getMessages();
        if (empty($messages)) {
            return '';
        }
        return '<div class="errors">' .
               $element->getView()->formErrors($messages) . '</div>';
    }
 
    public function buildDescription()
    {
        $element = $this->getElement();
        $desc    = $element->getDescription();
        if (empty($desc)) {
            return '';
        }
        return '<div class="description">' . $desc . '</div>';
    }
 
    public function render($content)
    {
        $element = $this->getElement();
        if (!$element instanceof Zend_Form_Element) {
            return $content;
        }
        if (null === $element->getView()) {
            return $content;
        }
 
        $separator = $this->getSeparator();
        $placement = $this->getPlacement();
        $label     = $this->buildLabel();
        $input     = $this->buildInput();
        $errors    = $this->buildErrors();
        $desc      = $this->buildDescription();
 
        $output = '<tr><th scope="row" class="form_label">'.$label.'</th>'
                . '<td>'.$input.$errors.$desc.'</td></tr>';
 
        switch ($placement) {
            case (self::PREPEND):
                return $output . $separator . $content;
            case (self::APPEND):
            default:
                return $content . $separator . $output;
        }
    }
}
du coup ça génère un truc comme ça (en version simplifier) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<tr><th>Label</th><td>input</td></tr>
A la limite ce que j'aimerais bien faire, c'est fusionné les deux cellule pour y mettre mon bouton pour avoir un truc du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<tr><td colspan="2">button</td></tr>
est ce que quelqu'un a une idée ?

//---Edit---

A oui j'oubliai je sais pas pourkoi mais je n'arrive pas a appiqué ce décorateur à Zend_Form_Element_File.
quand j'applique le decorateur je me choppe un warning :
Warning: Exception caught by form: No file decorator found... unable to render file element Stack Trace