Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-11-2009 11:45:20

Gordon
Nouveau membre
Date d'inscription: 03-11-2009
Messages: 2

[Zend_Form][1.8] Display_Group

Bonjour

Je suis confronté à un problème qui serait réglé en 2 minutes sans Zend_Form, mais là je bloque depuis 1h...

J'ai donc un formulaire contenant 2 displayGroups. Dans ces groupes, plusieurs éléments, mais j'aimerais encore en grouper d'autres à l'intérieur du premier displayGroup. Mais Zend ne permet pas d'ajouter de displayGroup dans un autre. Y a-t-il une solution ?

Voici le code que j'aimerai obtenir. Le premier groupe est le fieldset, et le second imbriqué dans le premier serait composé des champs textes.

Code:

<fieldset>
   <legend>Blabla</legend>
   <dl>
      <dt><input type="checkbox" /><label>Choix</label></dt>
      <dd>
         <label>Texte</label> <input type="text" />
         <label>Texte</label> <input type="text" />
         <label>Texte</label> <input type="text" />
      </dd>
</fieldset>

Merci

Hors ligne

 

#2 03-11-2009 14:09:46

stealth35
Membre
Date d'inscription: 30-08-2009
Messages: 29

Re: [Zend_Form][1.8] Display_Group

meme avec addSubForm ?

Hors ligne

 

#3 03-11-2009 14:53:06

Gordon
Nouveau membre
Date d'inscription: 03-11-2009
Messages: 2

Re: [Zend_Form][1.8] Display_Group

J'ai réglé le problème simplement en créant une classe héritant de Zend_Form_DisplayGroup.
Je n'ai aucun problème en utilisant cette méthode, peut-être que certains cas poseront des soucis, mais dans le mien tout roule.

Code:

class My_Form_DisplayGroup extends Zend_Form_DisplayGroup
{
    public function addDisplayGroup(Zend_Form_DisplayGroup $group)
    {
        $this->_elements[$group->getName()] = $group;
        $this->_groupUpdated = true;
        return $this;
    }
}

Hors ligne

 

#4 21-12-2009 15:40:19

Kaiowas
Membre
Date d'inscription: 03-08-2009
Messages: 49

Re: [Zend_Form][1.8] Display_Group

Bonjour,

Je fais face au même problème que Gordon : je souhaiterais implémenter des Groups dans d'autres Groups. Seulement, la solution qu'il a proposé me donne une erreur :

Code:

Exception caught by form: Plugin by name 'FormElements' was not found in the registry; used paths: ZendX_JQuery_Form_Decorator_: ZendX/JQuery/Form/Decorator/:ZendX/JQuery/Form/Decorator/

Si quelqu'un a une solution (ou alors si Gordon pouvait me fournir un code plus complet), ce serait gentil, merci d'avance ^^

Hors ligne

 

#5 23-12-2009 13:03:39

Kaiowas
Membre
Date d'inscription: 03-08-2009
Messages: 49

Re: [Zend_Form][1.8] Display_Group

Bon, j'ai réussi à utiliser le code de Gordon, mais je fais face à un autre problème : il se trouve que mes champs sont doublés (il affiche mes champs dans les différents displaygroups, et il les affiche ailleurs).

J'ai déclaré ces champs dans le form et le display, mais si je les déclare seulement dans le display, je peux pas insérer de données via le formulaire.

Quelqu'un aurait-il une solution? Dans quel ordre faut-il insérer les données ?

Hors ligne

 

#6 11-01-2010 15:21:33

ganlhi
Membre
Date d'inscription: 05-01-2010
Messages: 15

Re: [Zend_Form][1.8] Display_Group

Bonjour,

J'étais à la recherche d'une solution comme celle là, mais je ne sais pas comment écrire la création des groupes pour imbriquer un groupe dans un autre... Comment avez-vous fait ?

Merci d'avance.

Hors ligne

 

#7 21-07-2013 15:22:05

ptitjib
Membre
Date d'inscription: 03-12-2009
Messages: 10

Re: [Zend_Form][1.8] Display_Group

Bonjour,
Pour ceux qui chercheraient, voici une solution.
Merci à Gordon pour l'ajout de addDisplayGroup dans l'extension de la classe Zend_Form_DisplayGroup.

Il faut étendre Zend_Form_DysplayGroup comme suit:

Code:

class My_Form_DisplayGroup extends Zend_Form_DisplayGroup
{
    public function addDisplayGroup(Zend_Form_DisplayGroup $group)
    {
        $this->_elements[$group->getName()] = $group;
        $this->_groupUpdated = true;
        // Display group will now handle display of element
        if (null !== ($form = $this->getForm())) {
            $form->removeFromIteration($group->getName());
        }
        return $this;
    }
}

Il faut étendre Zend_Form comme suit:
Il s'agit de pouvoir ajouter un displayGroup vide.

Code:

class My_Form extends Zend_Form
{
    protected $dummyName = '_myDummy';

    public function addDisplayGroup(array $elements, $name, $options=null)
    {
        if (count($elements) == 0){
            $elt = new Zend_Form_Element_Hidden($this->dummyName);
            $elt->setIgnore(true);
            $elements[] = $elt; //$this->dummyName;
        }
        return parent::addDisplayGroup($elements, $name, $options);
    }

    public function render(Zend_View_Interface $view = null)
    {
        $this->removeElement($this->dummyName);
        return parent::render($view);
    }
}

Et maintenant dans votre formulaire:

Code:

class Default_Form_Test extends My_Form {

   public function _inti() {
      // ....
      $element = new Zend_Form_Element_Text('test');

      $this->addElements(array($element));


      $this->addDisplayGroup(array('test'), 'dpg_0_1');
      $this->getDisplayGroup('dpg_0_1')  ->setDecorators(array(
                                                    'FormElements',
                                                    array(array('container'=>'HtmlTag'), array('tag'=>'div'))
                                                ));

        $this->addDisplayGroup(array(), 'dpg_0', array('displayGroupClass'=>'My_Form_DisplayGroup'));
        $containerDisplayGroup = $this->getDisplayGroup('dpg_0);
        $containerDisplayGroup->addDisplayGroup($this->getDisplayGroup('dpg_0_1'));

      // ....
   }

}

Voilà ma solution, je ne sais pas si on peut encore ajouter des éléments au niveau 0, à tester...
Je remonte le topic en espérant que cela serve à d'autres encore sous ZF1 > 1.8.

JB (ZF 1.12 - Dojo)

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