Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir à tous,
Je débute depuis quelques semaines avec le Zend Framework et j'ai déjà fait le tour de plusieurs fonctionnalités. Je viens de créer mes formulaires pour mon application, et je souhaite une mise en forme spéciale de mes champs. Rien de plus simple que le code source pour comprendre :
Voici un champ normal :
<p> <label for="champ">Label : </label> <input type="text" id="champ" name="champ" /> </p>
Voici un champ avec une erreur :
<p class="erreur"><span>Message d'erreur</span> <label for="champ">Label : </label> <input type="text" id="champ" name="champ" /> </p>
Est-ce que vous pourriez me donner quelques pistes pour mettre cela en forme avec les décorateurs s'il vous plaît ? J'essaye depuis une bonne semaine et je suis arrivé à mettre en forme mes champs comme le 1er exemple, mais je n'arrive pas à ajouter les erreurs sous la forme désirée.
Certains me parlent de développer mon propre décorateur. J'ai donc essayer de me lancer dans ce procédé, mais sans résultat apparant.
J'ai crée une classe au nom de My_Form_Decorator_Input dans laquelle j'ai ma fonction render().
Cette classe doit bien être ajoutée dans le dossier /library/My/Form/Decorator/ ?
Voici le code que j'utilise dans mon formulaire :
$form->addPrefixPath('My_Form_Decorator', 'My/Form/Decorator', 'decorator');
Pour mettre ce contrôleur en action, je dois bien mettre le code suivant :
$form->setElementDecorators(array( array('Input'), ... ));
Si quelques pouvais me donner quelques pistons ça serait vraiment sympa.
Merci d'avance, et bonne soirée.
Florent.
Dernière modification par tonton flubb (31-10-2008 15:25:01)
Hors ligne
Bonsoir,
Personne ne sait m'aider sur le sujet ?
Bonne soirée à tous,
Florent.
Hors ligne
Voici ce que je passerai comme décorateur aux élements :
'ViewHelper', 'Label', array('Errors', array('placement' => 'prepend')), array('HtmlTag', array('tag' => 'p')
Et je réécris le décorateur erreur comme ca :
class My_Form_Decorator_Errors extends Zend_Form_Decorator_Errors { public function render($content) { $element = $this->getElement(); $view = $element->getView(); if (null === $view) { return $content; } $errors = $element->getMessages(); if (empty($errors)) { return $content; } $htmltag = $element->getDecorator('Htmltag'); if ($htmltag !== false) $element->getDecorator('Htmltag')->setOption('class', 'error'); $formErrors_Helper = $view->getHelper('formErrors'); $formErrors_Helper->setElementStart('<span'); $formErrors_Helper->setElementSeparator('</span><span>'); $formErrors_Helper->setElementEnd('</span>'); return (parent::render($content)); } }
Le décorateur entour l'erreur de <span>, et il rajoute le classe 'erreur' au décorateur htmltag
Hors ligne
Bonsoir nORKy,
Ecoute je te dis un très très grand merci car cela fait exactement ce que je désire !
J'étais partis entre temps sur la piste de réécrire le Decorator, mais je n'arrivé pas à l'ajouter au formulaire ...!
J'aurais juste une dernière petite question pour être sûr de moi. Mon Decorator doit bien être dans le dossier suivant :?
application/ library/ My/ Form/ Decorator/ Errors.php Zend/ public/
Sinon pour ceux qui souhaite utiliser ce poste, il y a juste une petite modification à faire dans le Decorator Errors à la 4ème ligne du bas, il manque le ">" à la balise :
$formErrors_Helper->setElementStart('<span>');
Et ensuite, il suffit d'ajouter ce code au formulaire :
$form->addElementPrefixPath('My_Form_Decorator', 'My/Form/Decorator/', 'decorator'); $form->setElementDecorators(array( array('ViewHelper'), array('Label'), array('Errors', array('placement' => 'prepend')), array('HtmlTag', array('tag' => 'p')) ));
Hors ligne
Je viens d'avoir la réponse sur le chat IRC.
Le dossier My est bien à placer dans le dossier library.
Ce sujet est donc résolu, encore un grand merci !
Hors ligne
Pages: 1