Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Après avoir passé facilement 2h à torturer google, je m'en remet à vous...
Je cherche désespérément à ajouter une class="error" sur les input ou tout autre élément de formulaire lors d'un echec de validation.
Quelqu'un aurait il une idée ?
Merci.
Hors ligne
Bon j'ai trouvé un bidouillage temporaire très moche... Mais bon, j'avance pas sur ce point, donc obligé de bricoler un peu.
Dans mon controller, je cherche si le form à créé des erreurs :
[lang=php]$errors = $formInscription->getErrors(); if(!empty($errors["email"])) { $this->view->formerrorInscriptionemail = "class='error'"; }
Et simplement dans ma view, j'englobe mon élément avec une div qui elle sera en class error :
[lang=php]<div <?= $this->formerrorInscriptionemail ?>> <?= $this->formInscription->email ?> </div>
Ça implique d'afficher son formulaire dans sa vue élément par élément.
Cette soluce ne me plait pas, mais tant que je ne trouve rien d'autre, elle est très bien
Si ça peut servir à d'autres
Dernière modification par Subshadow (20-04-2011 15:09:58)
Hors ligne
Bonjour,
Le meilleur moyen reste de créer tes propres décorateurs, tu peux ainsi gérer l'affichage de tes éléments comme tu le veux :
class EC_Form_Decorator_Element_Input 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 .= ' *'; $element->setAttrib('class', 'required'); } $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(); $label = $element->getLabel(); $desc = $element->getDescription(); if(empty($desc)) { return ''; } return '<div class="description" title="'.ucfirst($label).'" rel="'.$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 = '<div class="element">' . $label . $input . $desc . '<div class="clear"></div>' . $errors . '</div>'; switch($placement) { case (self::PREPEND): return $output . $separator . $content; case (self::APPEND): default: return $content . $separator . $output; } } }
Hors ligne
Merci de ta réponse, mais là si je comprend bien on arrive au même rendu final ? Pas de class error sur le input lui même ?
(Je suis bien content d'être passé à CI now, Zend c'est trop...trop quoi... ^^)
Hors ligne