IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

bug de rendu entre addDecorator et setDecorators ou pas?


Sujet :

Zend_Form PHP

  1. #1
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut bug de rendu entre addDecorator et setDecorators ou pas?
    Bonjour à tous!

    Suite à ce post:
    http://www.developpez.net/forums/d94...laire-tableau/

    J'ai fait quelques essais avec les méthodes addDecorator et setDecorators et je me suis aperçu d'un problème de rendu alors qu'il sont sensés rendre la même chose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
            $form = new Zend_Form();
            $form->setDecorators(array(
                'FormElements',
                array('HtmlTag', array('tag' => 'table')),
                'Form',
            ));
                $foo = new Zend_Form_Element_Text("foo");
                $foo->setLabel("foo");
     
                // Cette ligne est censée rendre la même chose ...../.....
                $foo->addDecorator('HtmlTag', array('tag' => 'td'))
                    ->addDecorator('Label', array('tag' => 'th'))
                    ->addDecorator('ViewHelper', array('tag' => 'td'));
     
                // .../... Que celle-ci
                $foo->setDecorators(array(
                    array('ViewHelper', array('tag' => 'td')),
                    'Errors',
                    array('Label', array('tag' => 'th')),
                    array('HtmlTag', array('tag' => 'td'))
                ));
     
                $form->addElement($foo);
                $form->addDisplayGroup(array("foo", "group_foo");
     
                $group = $form->getDisplayGroup("group_foo");
                $group->setDecorators(array(
                            'FormElements',
                            array('HtmlTag',array('tag'=>'tr'))
                ));
     
    // Ensuite dans la vue:
    <?php echo $this->form; ?>
    Si vous commentez une des deux lignes (addDecorator ou setDecorators) vous vous apercevrez que lorsque l'on utilise la methode setDecorators(), le champ input n'est pas englobé par les balises 'td'.

    Est-ce un bug ou c'est moi qui comprend rien (...encore)?
    Les idiots sont ceux qui ne posent jamais de question!

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Salut,

    En réalité le "setDecorators()" exécute un "clearDecorators()", dans mon code je fais un "clearDecorators()" juste avant mon "setDecorators()" hors c'est inutile dans mon cas (=> http://www.developpez.net/forums/d94...-element-zend/).

    Le "addDecorator()", empile (et modifie si déjà existant (à confirmer)) au décorateur déjà présent.

    Sinon je pense que les balises "td" sont présentent en tant qu'attribut d'une balise HTML ou autres...

    Regardes les sources de ta page à mon avis il te génère une "DIV" avec les attributs avec "setDecorators()" si c'est le cas c'est au niveau des paramètres que cela merdouille.

  3. #3
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    Salut!

    J'ai bien vu que setDecorators faisait un clearDecorators avant de tout rebricoler et c'est justement ce qui m'a permit de voir que le code généré alors que j'entre les même paramètres n'est pas le même.

    Voici le code source:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
        	$form = new Zend_Form();
        	$form->setDecorators(array(
    		    'FormElements',
    		    array('HtmlTag', array('tag' => 'table')),
    		    'Form',
    		));
     
        	$foo = new Zend_Form_Element_Text("foo");
        	$foo->setLabel("foo");
     
    		$foo->addDecorators(array(
    			array('ViewHelper', array('tag' => 'td')),
    			array('Label', array('tag' => 'th')),
    			array('HtmlTag', array('tag' => 'td'))
    		));
     
    		$form->addElement($foo);
     
        	$bar = new Zend_Form_Element_Text("bar");
        	$bar->setLabel("bar");
     
    		$bar->setDecorators(array(
    		    array('ViewHelper', array('tag' => 'td')),
    		    'Errors',
    		    array('Description', array('tag' => 'p')),
    		    array('Label', array('tag' => 'th')),
    		    array('HtmlTag', array('tag' => 'td'))
    		));
     
    		$form->addElement($bar);
    		$form->addDisplayGroup(array("foo","bar"), "group");
     
    		$group = $form->getDisplayGroup("group");
            $group->setDecorators(array(
                        'FormElements',
                        array('HtmlTag',array('tag'=>'tr'))
            ));
        	$this->view->form = $form;
    Et le code généré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <form enctype="application/x-www-form-urlencoded" action="" method="post">
    	<table>
    		<tr>
    			<!-- Code généré avec addDecorators() -->
    			<th id="foo-label">
    				<label for="foo" class="optional">foo</label>
    			</th>
     
    			<td> <!-- td généré par HtmlTag -->
    				<input type="text" name="foo" id="foo" value="">
    			</td>
     
    			<!-- Code généré avec setDecorators() -->
     
    			<td> <!-- td généré par HtmlTag -->
     
    				<th id="bar-label">
    					<label for="bar" class="optional">bar</label>
    				</th>
     
    				<input type="text" name="bar" id="bar" value="">
     
    			</td>
    		</tr>
    	</table>
    </form>
    Pourquoi lorsque je fait addDecorators() le htmlTag englode le champ input alors que lorsque je fait setDecorators il englode le label et le champ input ?!
    Les idiots sont ceux qui ne posent jamais de question!

  4. #4
    Membre éclairé Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Points : 663
    Points
    663
    Par défaut
    un p'tit up !!! c'est toujours d'actualité!
    Les idiots sont ceux qui ne posent jamais de question!

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2015, 18h00
  2. Réponses: 11
    Dernier message: 07/10/2011, 23h34
  3. Différences de rendu entre 2 OS serveur
    Par olive.m dans le forum Apache
    Réponses: 7
    Dernier message: 31/07/2010, 18h55
  4. Différence de rendu entre notebook et PC
    Par LordBob dans le forum Webdesign & Ergonomie
    Réponses: 4
    Dernier message: 21/06/2009, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo