Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'aimerais pouvoir insérer directement dans mon formulaire une image, mais que celle-ci ne soit pas considérée comme un bouton.
Si j'essaie un truc du style :
protected $_standardElementDecorator = array( 'ViewHelper', array('Description', array('class' => 'formHint')), array('Label', array('escape' => false)), array('Errors', array('placement' => 'append')), array('HtmlTag', array('tag' => 'span', 'class' => 'Style1')) ); $flogin_separateur = new Zend_Form_Element_Image('separateur'); $flogin_separateur->setImage('/1001sportifsv2/public/images/graph/separateur-rouge.gif') ->setAttrib('border',0) ->setDecorators($this->_standardElementDecorator);
Il me rend l'image cliquable, ce qui dans le cas présent n'est pas l'effet recherché.
J'imagine que c'est réalisable, mais aprés pas mal d'essais, je ne vois toujours pas...
Hors ligne
Le composant Zend_Form_Element_Image correspond à un bouton de validation de formulaire de type image.
Essaye de lui passer le paramètre disabled au pire ?
Ou crée un composant
Hors ligne
Une image dans un formulaire, c'est de la mise en page. Donc à mon avis, tu n'as pas à ajouter ton image dans ton formulaire en tant qu'élément mais dans l'affichage de ton formulaire.
Si tu ajoutes ton image en tant qu'élément alors on peut s'attendre à un check de validité, une tentative de remplissage par la méthode populate(), etc... Ce qu'on ne désire pas forcément.
Pour ce faire, si la mise en page est "complexe", je te conseille de travailler directement avec le view renderer de ton formulaire.
Si tu comprends l'anglais, jète un oeil là dessus :
http://devzone.zend.com/article/3450-De … -Zend_Form
En gros, le bout de code qui va bien, c'est ça :
$form->setDecorators(array( array('ViewScript', array('script' => 'customForm.phtml')) ));
L'autre solution, c'est de créer un élément bien à toi en surchargeant Zend_Form_Element et d'utiliser un décorateur et un helper de vue, à nouveau bien à toi, pour l'afficher.
Encore une solution, tu peux redéfinir le décorateur de vue et le helper de vue de ton bouton image uniquement pour ton élément particulier et spécifiant ton propre helper.
Hop, encore un petit lien :
http://framework.zend.com/manual/fr/zen … decorators
J'espère que ça t'aideras.
Hors ligne
Merci beaucoup pour vos réponses.
Keilnoth, ta réponse est vraiment complète, c'est super.
Je suis complètement de ton avis, la mise en page et surtout les éléments graphiques ne devraient pas se trouver là.
Pour être claire le formulaire, comme tu le dis de façon fort diplomatique, est complexe, ou plutôt, merdique.
Juste à titre d'information, voici la gueule de la bavure, ce qui va faire hurler à plus d'un titre pas mal de monde (je précise quand même que je ne suis pas l'auteur de la chose) :
<table width="900" height="35" border="0" align="center" cellspacing="0"> <form action="/index/connexion" method="post"> <tr> <td width="54"> <span class="Style1">Identifiant</span></td> <td width="66"><input name="identifiant" type="text" size="8"></td> <td width="74"><span class="Style1"> Mot de passe</span></td> <td width="79"><input name="motdepasse" type="password" size="8"></td> <td width="215" valign="top"> <input type="image" src="/public/images/graph/go1.gif" width="26" height="19" name="submit" alt="connexion"/> <img src="/public/images/graph/separateur-rouge.gif" border="0"> <a href="/index/enreg"> <img alt="enregistrement" src="/public/images/graph/enregistrer.gif" border="0"> </a> </td> <td width="86" align="center"><a href="/index/index" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image9','','/public/images/graph/accueil3.gif',1)"><img src="/public/images/graph/accueil1.gif" name="Image9" width="86" height="27" border="0"></a></td> </tr> </form> </table>
Comme tu peux le voir, on a un formulaire avec une table, c'est pas terrible.
Mais surtout il y a les balises <form> et </form> entre la balise <table></table> et <tr></tr> !! Avec IE6 ou IE7 si on met la balise <form> ailleurs, alors on génère à l'affichage une ligne vide... Pas avec FireFox
C'est clair, il faudrait tout refaire, mais la maquette complète est super lourde et truffée (c'est la saison) de bidules de ce genre et ce n'est pas mon job de refaire ça...
Voilà...
En tout cas merci encore.
Dernière modification par Jean-Marc Rigade (30-12-2008 10:31:08)
Hors ligne
Ah ouai, moche...
Pour éviter la ligne vide dans ton form tu peux lui ajouter les styles :
display:inline; padding:0; margin:0;
T'embêtes pas avec l'affichage standard de Zend_Form dans ces cas là. Tu peux simplement spécifier le ViewScript et ensuite, pour chaque champs, utiliser un truc du genre :
$this->element->tonChamp->getDecorator('HtmlTag')->render()
Mais je suis plus très sûr de la ligne exact. J'ai pas le code sous les yeux en ce moment. Ca permet de n'afficher que le décorateur qui affiche le champ du formulaire et pas de wrapper DtDd ou le label.
Hors ligne
Ben oui c'est pas terrible...
Le truc le plus nul c'est cette balise <form> entre <table> et <tr> qui dés quelle est mise ailleurs fout le bordel.
C'est toute la maquette qu'il faudrait revoir...
Je suis allé voir ton site, sympa, clair et bien foutu.
Hors ligne
Hors ligne
Pages: 1