Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous
Voilà je passe un peu de temps à améliorer la visualisation de mes champs aujourd'hui et je recherche un moyen de mettre en valeur certains champs d'un formulaire en fonction de leurs caractéristiques.
Deux caractéristiques principales :
- le champ est obligatoire (que je pense signaler simplement par un "astérix" )
- le champ utilisant un tableau de choix en js (changer la couleur de fond ou de la bordure du champ ou du label)
Pour le premier rien de compliquer je positionne un astérisque dans mon label mais pour la seconde partie je ne sais pas trop comment m'y prendre pour mettre en valeur mon champ quelqu'un a-t-il une idée ?
Dernière modification par matdev (09-07-2009 09:21:11)
Hors ligne
Pour ton label, tu peux passé par la conf du décorateur :
array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false))
Pour le 2/, as tu pensé aux CSS ?
array('Label', array('class' => 'maClass'))
Hors ligne
Merci nORKy
Je vais jeter un oeil aux décorateurs, je n'ai pas encore utiliser cette particularité de Zend.
Connaissez-vous des tutoriaux sur cet élément?
Dernière modification par matdev (30-06-2009 11:12:31)
Hors ligne
Je suis moi aussi en train de me pencher sur les décorateurs de formulaire, je suis en train de parcourir ce tuto :
http://devzone.zend.com/article/3450
Il a l'air pas mal.
Sinon la doc officielle est assez complète aussi
Hors ligne
J'ai une question concernant l'application des décorateurs, en fait je voulais savoir comment appliquer mon décorateur a tous les éléments de mon formulaire en une seule fois, au lieu de
$userName->setDecorators(array('Obligatoire')); ... $password->setDecorators(array('Obligatoire'));
Merci d'avance
Hors ligne
$form->setElementDecorators(...)
Hors ligne
nORKy a écrit:
Pour ton label, tu peux passé par la conf du décorateur :
array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false))
Pour le 2/, as tu pensé aux CSS ?
array('Label', array('class' => 'maClass'))
Je reviens un peu sur les décorateurs car j'ai un peu de mal à comprendre leur mise en place.
Ces éléments cités par nORKy ci-dessus sont appelés au niveau de mon modele de formulaire ou dans le controleur lors de la creation de l'objet ?
Hors ligne
Les décorateurs sont à utilisés lors de la création de l'élément de ton formulaire
Hors ligne
nORKy a écrit:
Les décorateurs sont à utilisés lors de la création de l'élément de ton formulaire
de la maniere suivante donc :
$userName->setDecorators(array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false)));
Hors ligne
Si tu utilises setDecorators(array(blabla) tu dois redéfinir les autres décorateurs (ViewHelper, Errors, HtmlTag...) Sinon pour ne redéfinir qu'un seul décorateur utilise addDecorators(array(blabla))
Hors ligne
ok merci aelyta1 par contre est-il que la définition suivante :
addDecorators(array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false)))
soit prise en compte directement par tous les éléments de mes formulaires étant obligatoires sans avoir à l'ajouter pour chaque élément?
Dernière modification par matdev (07-07-2009 11:51:36)
Hors ligne
J'ai ajouté
addDecorators(array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false))) sur un élément de mon formulaire :
<?php class ArticlesForm extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName('creationarticle'); $id = new Zend_Form_Element_Hidden('id'); $typearticle = new Zend_Form_Element_Text('Types_articles_id'); $typearticle->setLabel('Type d\'articles') ->setRequired(true) ->setAttrib('onFocus','champsur(this)') ->addValidator('NotEmpty') ->addDecorators(array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false))); ............
et j'obtiens l'erreur suivante :
Warning: Exception caught by form: Plugin by name '*' was not found in the registry; used paths: Zend_Form_Decorator_: Zend/Form/Decorator/;Zend/Form/Decorator/ Stack Trace: #0 C:\wamp\www\cdl\library\Zend\Form\Element.php(1703): Zend_Loader_PluginLoader->load('*') #1 C:\wamp\www\cdl\library\Zend\Form\Element.php(2062): Zend_Form_Element->_getDecorator('*', false) #2 C:\wamp\www\cdl\library\Zend\Form\Element.php(1853): Zend_Form_Element->_loadDecorator(Array, '*') #3 C:\wamp\www\cdl\library\Zend\Form\Element.php(1909): Zend_Form_Element->getDecorators() #4 C:\wamp\www\cdl\library\Zend\Form\Decorator\FormElements.php(101): Zend_Form_Element->render() #5 C:\wamp\www\cdl\library\Zend\Form.php(2595): Zend_Form_Decorator_FormElements->render('') #6 C:\wamp\www\cdl\library\Zend\Form.php(2610): Zend_Form->render() #7 C:\wamp\www\cdl\application\views\scripts\fichier\ajouterarticle.phtml(2): Zend_Form->__toString() #8 C:\wamp\www\cdl\library\Zend\View.php(107): include('C:\wamp\www\cdl...') in C:\wamp\www\cdl\library\Zend\Form.php on line 2615
Quelqu'un comprend il pourquoi ?
Hors ligne
Parce que tu utilises mal la fonction
essai ca :
->addDecorators(array( array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false)) ));
ou alors, (sans le s à AddDecorators et plus facile à lire)
->addDecorator('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false));
Dernière modification par nORKy (07-07-2009 12:11:08)
Hors ligne
Bon je n'ai plus l'erreur mais par contre mon label n'est plus visible ?
Je viens de regarder la source de ma page et le label est bien présent mais il n'est plus entouré de balise <dt></dt> comme les autres labels?
Dernière modification par matdev (07-07-2009 12:15:23)
Hors ligne
C'est bon j'ai corriger le problême en ajoutant un petit quelque chose à la fin
addDecorator('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false,'tag' => 'dt'))
Hors ligne
nORKy a écrit:
Pour ton label, tu peux passé par la conf du décorateur :
array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false))
Encore une petite question : est-il possible d'affecter ceci à l'ensemble de mes champs obligatoires sans avoir à repeter la ligne pour chacun d'eux
nORKy a écrit:
Pour le 2/, as tu pensé aux CSS ?
array('Label', array('class' => 'maClass'))
Pour la deuxieme partie, j'ai adapter ce que vous m'aviez expliqué avant et l'attribution d'une classe pour changer le style depuis une CSS fonctionne. (Merci nORKy)
Dernière modification par matdev (07-07-2009 14:48:51)
Hors ligne
Bon au finale je laisse une définition élément par élément car j'ai rassemblé plusieurs info dans le décorateurs permettant de différencier mes champs.
Je clos donc ce poste en remerciant nORKy et aelyta1 pour leurs infos
Hors ligne
Pages: 1