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 :
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) :
<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 :
<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
Partager