Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-01-2009 08:29:40

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

[Zend_Form] Mise en page des formulaires

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

 

#2 13-01-2009 09:16:30

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form] Mise en page des formulaires

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.


----
Gruiiik !

Hors ligne

 

#3 13-01-2009 09:22:18

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Form] Mise en page des formulaires

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+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#4 13-01-2009 10:18:08

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Form] Mise en page des formulaires

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

 

#5 13-01-2009 10:59:42

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: [Zend_Form] Mise en page des formulaires

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" :

Code:

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

 

#6 13-01-2009 11:08:03

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Form] Mise en page des formulaires

Voici un petit lien intéréssant http://devzone.zend.com/article/3450-De … -Zend_Form

Hors ligne

 

#7 13-01-2009 11:10:47

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Zend_Form] Mise en page des formulaires

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 smile


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#8 13-01-2009 11:14:33

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Form] Mise en page des formulaires

C'est quand même dommage de se priver du rendu automatique...

Hors ligne

 

#9 13-01-2009 11:25:28

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Zend_Form] Mise en page des formulaires

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.


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#10 13-01-2009 11:48:50

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Form] Mise en page des formulaires

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

 

#11 13-01-2009 12:28:43

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Zend_Form] Mise en page des formulaires

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


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#12 13-01-2009 14:20:42

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: [Zend_Form] Mise en page des formulaires

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)


Société : Direct Info Service

Hors ligne

 

#13 14-01-2009 00:25:34

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: [Zend_Form] Mise en page des formulaires

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. wink

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.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#14 14-01-2009 01:42:42

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [Zend_Form] Mise en page des formulaires

Tout cela est bien dit smile

Petit coup d'oeil sur les dl/dt/dd : http://maxdesign.developpez.com/tutorie … efinition/

Hors ligne

 

#15 14-01-2009 10:08:03

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form] Mise en page des formulaires

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.


----
Gruiiik !

Hors ligne

 

#16 15-01-2009 09:42:08

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: [Zend_Form] Mise en page des formulaires

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

 

#17 15-01-2009 11:01:38

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form] Mise en page des formulaires

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

Code:

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, :

Code:

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'
    ));

  }
}

----
Gruiiik !

Hors ligne

 

#18 15-01-2009 11:53:20

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: [Zend_Form] Mise en page des formulaires

merci beaucoup je comprends mieux now smile

Dernière modification par Moimeme (15-01-2009 11:53:47)

Hors ligne

 

#19 15-01-2009 14:38:13

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: [Zend_Form] Mise en page des formulaires

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

 

#20 15-01-2009 14:43:52

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form] Mise en page des formulaires

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.


----
Gruiiik !

Hors ligne

 

#21 15-01-2009 14:49:47

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: [Zend_Form] Mise en page des formulaires

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

 

#22 15-01-2009 14:54:13

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form] Mise en page des formulaires

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..


----
Gruiiik !

Hors ligne

 

#23 15-01-2009 14:56:34

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: [Zend_Form] Mise en page des formulaires

c'est bon merci en effet coquille dans le nom de lextends, merci encore c'est nikel.

Hors ligne

 

#24 15-01-2009 15:21:54

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: [Zend_Form] Mise en page des formulaires

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. tongue


Quelques tutoriaux Zend Framework !

Hors ligne

 

#25 15-01-2009 15:31:10

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: [Zend_Form] Mise en page des formulaires

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 sad une idée norky ?

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages