Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-07-2010 10:02:47

manuscle
Nouveau membre
Date d'inscription: 05-02-2009
Messages: 3

bug de rendu entre addDecorators et setDecorators ou pas?

Bonjour à tous!

J'essaie de comprendre pourquoi il y a une différence de rendu entre addDecorators() et setDecorators() alors que je renseigne les mêmes infos...

Prenez le code suivant, copiez-collez le dans une action et regardez le résultat. J'essaie de faire un formulaire en tableau multi-lignes, multi-colonnes...

Code:

<?php        
       $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;

/** A METTRE DANS LA VUE **/
<?php echo $this->form ?>

foo et bar sont deux champs textes initialisé de la même façon a une subtilité pès:
- pour modifier les décorateurs de foo, j'ai utilisé la méthode addDecorators
- pour modifier les decorateurs de bar, j'ai utilisé la méthode setDecorators

Tel que c'est défini, le rendu des deux champs devrait être exactement le même, mais il s'avère que le champ input de bar n'est pas englobé par une balise 'td' alors qu'il devrait l'être...
Je n'arrive pas à trouver pourquoi!
Je sais que la methode setDecorators() fait un clearDecorators(), qui consiste betement à réinitialiser la propriété _decorators et à ajouter les nouveaux décorateurs. Mais si vous faites un dump de foo et de bar, vous verrez que la propriété _decorators de chacun est exactement la même! Le rendu quand à lui est différent, donc je ne comprend pas!

J'espère que je me suis fait comprendre!

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