Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-08-2010 00:14:00

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Zend_Form_Decorator : div sur label

Bonjour

Je débute avec le composant Zend_Form_Decorator et je suis confronté à un petit problème auquel je ne trouve pas de réponse. Je pense qu'il s'agit plus d'un problème de compréhension de ma part que d'une erreur.

Sur un formulaire, j'aimerai que le rendu soit de cette forme :

Code:

<form ...>
    <div class="un_element">
        <div class="label_element">
            <label for="id-1">Blabla</label>
        </div>
        <div class="champ_element">
            <input .... id="id-1" />
        </div>
    </div>
    <div class="un_element">
        <div class="label_element">
            <label for="id-2">Blabla</label>
        </div>
        <div class="champ_element">
            <input .... id="id-2" />
        </div>
    </div>
</form>

En gros, les input sont dans "champ_element", le label dans "label_element", le tout dans une box "un_element" et le tout dans le formulaire.
J'ai donc sortie cela :

Code:

$this->setElementDecorators(array(
    'ViewHelper',
    'Errors',
     array('HtmlTag', array('tag' => 'div', 'class' => 'champ_element')),
     array('label', array('tag' => 'div', 'class' => 'label_element')),
     array('decorator' => array("conteneur" => "HtmlTag"), 'options' => array('tag' => 'div', 'class' => 'un_element'))
        ));

ce qui me sort donc le résultat suivant :

Code:

<div class="un_element">
    <div id="nom_champ-label">
        <label class="label_element required" for="nom_champ">Nom du champ</label>
    </div>
    <div class="champ_element">
        <input type="text" maxlength="50" size="50" value="" id="nom_champ" name="nom_champ">
    </div>
</div>

Le problème est donc le suivant :
La classe que je veux attribuer au div conteneur du label (label_element) est attribué au label et le div conteneur récupère un identifiant automatiquement
J'aimerai le contraire.

D'avance merci à ceux qui auraient des pistes wink

Bonne soirée.

Pierre

Hors ligne

 

#2 18-08-2010 07:08:21

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

Re: Zend_Form_Decorator : div sur label

Tu ne peux pas.

Mais quelle idée de mettre autant de div ?!

Alors qu'a notre époque, les Framework et autre moteurs de templates nous aident a rendre le code PHP plus lisible, le HTML a tendance à devenir de plus en plus illisible avec l'ajout de balise div (qui sémantiquement, ne veulent presque rie ndire) à profusion...


----
Gruiiik !

Hors ligne

 

#3 18-08-2010 15:49:08

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Re: Zend_Form_Decorator : div sur label

Bonjour et merci pour ta réponse wink

L'idée c'est d'avoir quelque chose de parfaitement paramétrable dans le CSS.
Or, l'attribut width dans les label, ça n'existe pas comme d'autres attributs pour d'autres balises.

Je trouve que les div se prêtent mieux à ça.

Faire quelque chose de la forme :

Code:

<tr>
        <td><label for="username" class="optional">Username:</label></td>
        <td class="element">
            <input type="text" name="username" id="username" value="">
        </td>
    </tr>

Reviens exactement au même ... ?

Concernant l'illisibilité du code, je ne vois pas ce qui gène étant donné que les décorateurs sont la pour ne plus toucher à ce fameux code HTML et ne pas avoir la main dessus ...

Quelle autre solution proposerais-tu pour définir autant de propriété CSS que possède un div afin de personnalisé les conteneurs de mes labels?

Bonne journée !

Hors ligne

 

#4 18-08-2010 16:44:51

omega2
Membre
Lieu: Boisbriand, quebec, canada
Date d'inscription: 01-04-2009
Messages: 85
Site web

Re: Zend_Form_Decorator : div sur label

Salut,

Avec les CSS tu peux changer le comportement des éléments. un label peut se comporter comme un div, un div comme un paragraphe, etc.
Ce qui faut que tu regardes, c'est la propriété css "display". La valeur dont t'as besoin est "block" (ou "inline-block" si le "block" ne doit pas provoquer de retour à la ligne). Une fois que le label se comporte comme un "block", tu peux lui donner une taille.

Hors ligne

 

#5 18-08-2010 17:02:45

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Re: Zend_Form_Decorator : div sur label

Merci pour cette précision, je vais essayer dès que je peux wink

Hors ligne

 

#6 19-08-2010 00:40:43

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Re: Zend_Form_Decorator : div sur label

Bon et bien dans ce cas, je comprend mieux le commentaire de norky smile Effectivement, mais div deviennent inutile étant donné que le label est le seul élément à positionner dans le bloc.

Merci à vous deux pour ces éclaircissements.

J'aurais une autre petite question concernant les décorators, j'aimerai savoir de quelle côté je dois m'orienter pour créer un genre de fieldset pour diviser mon formulaire en plusieurs parties ?

Si vous avez des pistes, je suis également preneur.

Bonne soirée,
Pierre

Hors ligne

 

#7 19-08-2010 04:35:35

omega2
Membre
Lieu: Boisbriand, quebec, canada
Date d'inscription: 01-04-2009
Messages: 85
Site web

Re: Zend_Form_Decorator : div sur label

Zend_Form_DisplayGroup est justement fait pour ça et fait appel à un décorateur justement nommé "FieldSet" (fonction loadDefaultDecorators du fichier Zend/Form/DisplayGroup.php)

Hors ligne

 

#8 19-08-2010 09:18:09

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Re: Zend_Form_Decorator : div sur label

Très bien merci, je vais regarder dans cette direction wink

Hors ligne

 

#9 23-08-2010 23:20:53

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Re: Zend_Form_Decorator : div sur label

Merci beaucoup à toi omega2 car les DisplayGroup sont particulièrement pratique !

J'ai encore une autre petite interrogation :
J'aimerai ajouter un div particulier après un champ particulier. Pour ça, je définis mes décorateurs par défaut, et je viens personnaliser le champ particulier après. J'étend la classe Zend_Form_Decorator_Abstract pour créer mon propre décorateur, la dessus pas de problème : mon div s'affiche.

Mon problème concerne la place de ce décorateur. Comment puis-je définir le placement d'un décorateur sans redéfinir la totalité des décorateurs ?

Merci d'avance wink

Dernière modification par DJPi (23-08-2010 23:21:10)

Hors ligne

 

#10 23-08-2010 23:36:09

omega2
Membre
Lieu: Boisbriand, quebec, canada
Date d'inscription: 01-04-2009
Messages: 85
Site web

Re: Zend_Form_Decorator : div sur label

Dans la classe Zend_Form_Decorator_Abstract, tu as deux constantes "PREPEND" et "APPEND".
Elles servent à indiquer au décorateur s'il doit s'afficher avant ou après l'objet. Le comportement par défaut est "autour de l'objet". Tu as des exemples dans la doc du framework il me semble.

Charge au décorateur ensuite de tenir compte de ces valeurs dans la fonction "render" pour s'afficher là où il est demandé. Tu peux prendre exemple sur ceux fournis avec le framework pour savoir comment faire.

Au fait, pourquoi est ce que tu n'as pas utilisé le décorateur HtmlTag pour rajouter la balise "DIV" supplémentaire? A par si tu as souvent les même paramètres à fournir à ton div, le HtmlTag aurait pu suffire.

Hors ligne

 

#11 24-08-2010 09:37:32

DJPi
Membre
Date d'inscription: 12-04-2010
Messages: 12

Re: Zend_Form_Decorator : div sur label

omega2 a écrit:

Dans la classe Zend_Form_Decorator_Abstract, tu as deux constantes "PREPEND" et "APPEND".
Elles servent à indiquer au décorateur s'il doit s'afficher avant ou après l'objet. Le comportement par défaut est "autour de l'objet". Tu as des exemples dans la doc du framework il me semble.

Effectivement, dans ma méthode render, j'ai PREPEND et APPEND.
Cependant, de ce que je comprends, on peut venir placer un décorateur AVANT (append) ou APRES (prepend) les décorateurs déjà existants. Mais comment faire pour l'intercaler après un décorateur précis par exemple ?
Je vais retourner faire un tour vers la doc de Zend maintenant que je maitrise un peu mieux ce composant.

Merci pour ton aide wink

Au fait, pourquoi est ce que tu n'as pas utilisé le décorateur HtmlTag pour rajouter la balise "DIV" supplémentaire? A par si tu as souvent les même paramètres à fournir à ton div, le HtmlTag aurait pu suffire.

C'est exactement pour ça wink Le div en question possède pas mal de classes et de paramètres, je trouve que ça vient alléger le code du formulaire.

Hors ligne

 

#12 25-08-2010 05:20:42

omega2
Membre
Lieu: Boisbriand, quebec, canada
Date d'inscription: 01-04-2009
Messages: 85
Site web

Re: Zend_Form_Decorator : div sur label

PREPEND et APPEND ne veut pas dire avant ou après les autres décorateurs mais "avant ou après le texte retourné par le décorateur précédant" : à ma connaissance ces deux valeurs n'influencent pas l'ordre de traitement des décorateurs.

PS : Techniquement chaque décorateur reçoit un texte comme paramètre de la méthode "render". Les éléments créés par le décorateur sera placé avant ou après ce texte si l'une des deux valeurs est indiqué et que le décorateur ne casse pas ce principe en générant un autre texte à la place.
Le texte reçu en paramètre correspond au choix :
- au texte retourné par la méthode "render" du décorateur exécuté précédemment
- au texte retourné par la méthode "render" de l'élément du formulaire

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