Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1 2
Salut,
Etant donné de la difficulté que j'ai à trouver des sources/exemples concrets afin de mettre en page mes formulaires, je me suis demandé si les décorateurs de Zend_Form n'étaient pas très au point ou si c'était la documentation qui manquait cruellement ?
Car, je trouve que c'est en vrai calvert de faire des mises en page sous forme de tableau, ou de faire un affichage comme ceci : http://demo-admin.magentocommerce.com/index.php/admin/
Plusieurs moyens de substitution sont possibles, par exemple utiliser la fonction "getFormModeWrite" (http://www.z-f.fr/forum/viewtopic.php?pid=13548#p13548) mais n'y a-t-il pas un moyen plus simple, plus clair, plus propre ?
Car Zend_Form gère très efficacement les formulaires (filtres, validateurs, etc.) et ça serait dommage de s'en passer juste pour ça, mais parfois il est difficile d'obtenir un résultat correct.
Hors ligne
Ma réponse ne va pt être pas te plaire :
ZF a été concu pour des personnes qui possède déjà un certains niveau de programmation. Par déduction, si ces personnes ont un bon niveau de PHP, alors, elles ont aussi un bon niveau de HTML, et donc, par déduction de CSS.
Faire un formulaire avec des balises pour tableaux n'est pas schématiquement correct (un tableau est fait pour présenter des données, par pour présenter un formulaire), et d'ailleurs, si tu pousses à codé en XHTML 1.0 Strict, il va être difficile d'intégrer les balises de formulaires avec les balises de tableaux car c'est tout simplement interdit.
De ceci en découle mon proverbe perso :
Quand on arrive pas à faire qqchose, c'est qu'on s'y prend mal et qu'il faut le faire d'une autre manière.
Hors ligne
Hello,
Je vais essayer d'écrire un tuto. Je viens justement de décorer mes formulaires en me calant sur les thèmes jQuery UI (http://ui.jquery.com/themeroller#tr=&am … Shadow=8px) Je vous tiens au courant d'ici à la fin de la semaine.
A+
Hors ligne
J'vais dire pareille que les autres:
Sémantique: XHTML
MISE EN FORME: CSS !
Dès fois on doit un peu jouer sur les décorateurs, mais perso j'évite au maximum.
Hors ligne
Merci pour vos réponses mais je pense que j'ai du mal m'expliquer.
Je sais très bien que les tableaux ne sont pas là pour faire de la mise en forme, mais certaine fois j'ai besoin d'effectuer des mises en page spéciales et c'est pourquoi je me demandais si l'utilisation des Decorators étaient conseillées ou s'il valait mieux les éviter.
Par exemple ce n'est pas toujours facile de trouver le moyen d'écrire un texte devant et après un champ, pour par exemple obtenir ce rendu avec deux champs "date" :
from [FIELD1] to [FIELD2] 2009
Je ne sais pas si c'est moi qui ait sauté un chapitre de la documentation, mais la personnalisation des formulaires m'a toujours semblé ne pas y être abordé.
Dernière modification par acharrex (13-01-2009 11:00:22)
Hors ligne
Voici un petit lien intéréssant http://devzone.zend.com/article/3450-De … -Zend_Form
Hors ligne
Perso j'utilise Zend_Form mais je conçois mes formulaire en Html, exite les decorateurs et tous ça.
Desolé je n'apporte rien à ton problème
Hors ligne
Mr.MoOx a écrit:
C'est quand même dommage de se priver du rendu automatique...
C'est à dire ?
J'utilise pleinement les avantages de zend_form mais je concois juste le sofrmulaires en html qui est plus facile à faire en html que php et puis la lecture du code est plus agréable.
Hors ligne
Ben tu fais surement plein de echo et/ou tu te tapes l'html à la main.
Lorsque tu modifie ton zend_form, tu dois aussi modifier l'html.
De plus tu dois surement gérer le rendu des erreurs.
Niveau maintenance ca nécessite plus de travail.
Perso moi j'aime bien faire un petit "echo $this->monForm;" ! Et je suis pas près de recoder du <form> à la main.
PS: Un autre petit avantage de gérer de l'html automatiquement, c'est que ça évite des erreurs parfois bêtes genre un " oublié pour un attribut ou autre >... Ce qui peut exploser ta mise en forme sur certain navigateur (ce qui n'est pas anormal)
Hors ligne
Oui je genere moi meme les erreurs, mais bon avec une petite fonction et ca passe.
PS: Un autre petit avantage de gérer de l'html automatiquement, c'est que ça évite des erreurs parfois bêtes genre un " oublié pour un attribut ou autre >... Ce qui peut exploser ta mise en forme sur certain navigateur (ce qui n'est pas anormal)
Euh je ne programme avecun bloc note, avec un ide avec colorisation et autocompletion normalement aucun souci.
Je trouve que c'est moins lourd que de trainer avec les decorateurs et tous le bordel, enfin chacun sa manière.
acharrex ->
Désolé d'avoir pollué ton post
Hors ligne
Si on en revient on débat, le dl dt est un peu galère à mettre en forme par rapport à des ul li.
Pour ma part j'ai simplement créé une classe qui dérive Zend_Form et qui change les décorateurs, et mes formulaires dérivent de cette classe.
Je me suis aidé de l'article : http://devzone.zend.com/article/3450-De … -Zend_Form , comme cité plus haut.
Dernière modification par yannux (13-01-2009 14:21:41)
Hors ligne
Je sais pas pourquoi Zend a opté pour un affichage par défaut avec des DL DT DD. On parlait de sémantique avant et ce système est, il me semble, incorrect étant donné qu'il est impossible de mettre en rapport le DT du label avec le DD du champ. Le seul rapport entre eux est qu'ils se suivent.
Egalement, exemple de dysfonctionnement, il est impossible de s'assurer que la hauteur du DT sera identique à celle du DD. Mais le problème est moindre ici.
Par contre, pour revenir à la question qui est posée plus haut, il est certain que l'utilisation des décorateurs, au début, est plus ardue que la création d'un script phtml qui va afficher le formulaire comme bon nous semble.
Mais il y a un énorme avantage de créer ses formulaires automatiques et c'est simplement qu'ils sont tous identiques et qu'il suffit de retoucher le CSS pour tous les modifier. Eh oui, on travaille dans un modèle MVC, c'est pas pour rien.
Sinon il est également possible de créer entièrement des éléments, des décorateurs et des helpers. Donc facile, il me semble, de créer un élément "jourEtMoisEnDeuxChamp". Mais il c'est clair que ça doit être beaucoup plus difficile d'ajouter des décorateurs à des éléments existants pour faire ça.
Hors ligne
Tout cela est bien dit
Petit coup d'oeil sur les dl/dt/dd : http://maxdesign.developpez.com/tutorie … efinition/
Hors ligne
Mes formulaires ressembles à ceci : http://sprawsm.com/uni-form/
Le seule décorateur que j'ai du refaire est error, pour pouvoir rajouter une class 'error' à mon div au dessus lorsqu'un élement génère une erreur.
Après, tout est question de configuration des décorateurs, CSS, et de classes.
Hors ligne
Norky comment tu paramètre le/les décorateurs pour avoir ce rendu ?
Tu paramètre les decorateurs sur le form ? sur chaque element ?
Tu as un exemple concret stp, merci.
Hors ligne
J'ai une classe qui étend Zend_Form avec plusieurs décorateurs prédéfinis :
(je montre qu'une partie, car sinon, le code est trop gros
class My_Form extends Zend_Form { protected $_standardElementDecorator = array( 'ViewHelper', array('Description', array('class' => 'formHint')), array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false)), array('Errors', array('placement' => 'prepend')), array('HtmlTag', array('tag' => 'div', 'class' => 'ctrlHolder')) ); protected $_standardUiElementDecorator = array( 'UiWidgetElement', array('Description', array('class' => 'formHint')), array('Label', array('requiredPrefix' => '<em>*</em>', 'escape' => false)), array('Errors', array('placement' => 'prepend')), array('HtmlTag', array('tag' => 'div', 'class' => 'ctrlHolder')), ); protected $_buttonElementDecorator = array( 'ViewHelper', array('HtmlTag', array('tag' => 'div', 'class' => 'buttonHolder')) ); protected $_standardGroupDecorator = array( 'FormElements', array('Fieldset', array('class' => 'inlineLabels')) ); protected $_buttonGroupDecorator = array( 'FormElements', 'Fieldset' );
Dans cette classe, j'ai aussi un __construct qui initialise diverses choses comme mes répertoires d'helper, de traduction
Pour la construction d'un formulaire, :
class My_Form_Trunk_Add extends My_Form { public function init() { $this->addElement('text', 'name', array( 'decorators' => $this->_standardElementDecorator, 'label' => 'Nom du trunk:', 'required' => true, )); $this->addDisplayGroup( array('name', 'client_id'), 'trunkdata', array( 'disableLoadDefaultDecorators' => true, 'decorators' => $this->_standardGroupDecorator, 'legend' => 'Nouveau trunk', )); $this->addElement('button', 'submit', array( 'decorators' => $this->_buttonElementDecorator, 'label' => 'Ajouter', 'class' => 'submitButton', 'type' => 'submit' )); } }
Hors ligne
merci beaucoup je comprends mieux now
Dernière modification par Moimeme (15-01-2009 11:53:47)
Hors ligne
Hum j'obtiens le message d'erreur suivant !!! qu'est ce que j'ai loupé tu as quoi de special dans le constructeur ?
Object of class My_Form_Trunk_Add could not be converted to string
Hors ligne
C'est a quelle ligne ton erreur ?
J'ai pas coller tout le code.
Dans My_Form, tu trouves aussi les décorateurs du formulaire lui-même, ou l'activation de Jquery (ZendX_JQuery::enableForms($this))
et ne pas oublié le parent::__construct.
Hors ligne
J'ai l'erreur sur la ligne echo $this->form; de la vue.
J'ai essayé de voir avec un print_r($this->form) et j'ai l'objet complet (non rendu) .... je vois pas pourquoi il fait pas le rendu de l'objet ...
Hors ligne
dans mon exemple, My_Form_Trunk_Add doit étendre My_Form
My_Form doit étendre Zend_Form
et le construct de My_Form doit appelé parent::__construct()
T'as oublié qqchose..
Hors ligne
c'est bon merci en effet coquille dans le nom de lextends, merci encore c'est nikel.
Hors ligne
Je suis en train de me prendre la tête avec un problème semblable. En fait, je ne trouve pas le moyen de définir des décorateurs par défaut pour tous les éléments de mes formulaires existants et d'écraser ces décorateurs uniquement pour certains éléments (comme le bouton submit).
Ce qui me paraît une manière plus logique de procéder dans le sens que 95% de mes éléments vont avoir les même décorateurs, je ne devrais pas à avoir à le spécifier pour tous ces éléments mais uniquement une fois lors de la création de mon formulaire.
La méthode setElementDecorators écrase de manière impitoyable tous les décorateurs. Mais elle permet de spécifier en paramètre des exceptions. Donc dans le cas de nORKy, il faudrait spécifier que le bouton submit est une exception. Ou alors créer ses propres éléments en étendant ceux de Zend et en spécifiant à chaque fois les même décorateurs dans la fonction loadDefaultDecorators().
Ou alors surcharger Zend_Form_Element ? Mais comment faire pour que les éléments Zend héritent de My_Form_Element par défaut ?
Enfin, là, j'ai le cerveau en compote... Faut que je repasse là dessus à tête reposée.
Hors ligne
lol j'en suis exactement au même point et j'ai la même approche.
Dans le constructeur de My_Form j'ai ajouté :
$this->setElementDecorators($this->_standardElementDecorator);
Donc tout roule et j'ai balancer sur mon bouton dans My_Form_Trunk_Add :
$submit = new Zend_Form_Element_Submit('submit');
$submit->setLabel('Valider');
$submit->setDecorators($this->_buttonElementDecorator);
Mais comme tu dit ca écrase pas une idée norky ?
Hors ligne
Pages: 1 2