Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-05-2008 14:56:44

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

[1.5.1] [Zend_Form] Multiradios ?

Rerere-Bonjour (encore)

J'aimerais, dans mon formulaire, permettre à l'utilisateur de classer de par ordre de préférence des "trucs".
Je voulais faire de cette manière :

Code:

Classez ces fruits de 1 à 4 par ordre de préférence (décroissant)

         1    2    3    4
fraise   o    o    o    o
banane   o    o    o    o
abricot  o    o    o    o
pomme    o    o    o    o

Le principe c'est que je voudrais créer mes 4 éléments radio, puis les rassembler tous les 4 en un "superElement" qui aurait lui même un label -- à savoir "Classez ces fruits de 1 à 4 par ordre de préférence (décroissant) 1    2    3    4" que je me débrouillerais pour placer comme il faut.

J'ai du mal à faire ce que je veux (en fait je n'y arrive pas du tout).
A la rigueur s'il était possible de placer un élément "label" tout seul sans input, je saurais m'en contenter. Mais je n'ai pas trouvé sad

A l'aide ?

PS : les liens pointant sur des tutos Zend_Form sont les bienvenus. Je parle de vrais tutos complets avec des exemples. Même en anglais j'ai pas peur tongue .

Hors ligne

 

#2 09-05-2008 18:15:30

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [1.5.1] [Zend_Form] Multiradios ?

Ce sont les décorateurs qui réalise la mise en forme de tes éléments. Un éléments est composé d'un label + input.  Pour réaliser ma mise en forme qui n'utilise pas les dd, dt des zend_form, j'ai désactivé les décorateurs par défaut. Puis, j'ai créé mes propres décorateurs réalisant la mise en forme que je souhaite sur un élément. Pour avoir plusieurs éléments sur une ligne (comme tu veux faire avec tes radioboutons) j'utilise les groupe.

Je reprends : j'ai un groupe. Ce groupe a un et un seul décorateur qui enveloppe tous les éléments qui seront ajoutés au groupe et placera un label (ici ce sera tes radio boutons). Je créé les  radioboutons et chacun d'eux seront initialisés avec un et un seul décorateur (qui affichera que le input et non le label). Du coup, tu auras ce que tu veux.

Ca a l'air compliqué, mais en fait, une fois que t'as pigé comment fonctionne les décorateurs, ça va tout seul. Dans la documentation officiel, tu as un exemple pour créer un décorateur. Voilà comment j'utilise les Zend_Form, mais attends peut-être qu'un expert ZF te réponds.

Dernière modification par whitespirit (12-05-2008 11:53:24)

Hors ligne

 

#3 12-05-2008 09:27:17

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

Re: [1.5.1] [Zend_Form] Multiradios ?

Pas mieux...
Un displayGroupe "fraise" contenant tes radios sans label et ainsi de suite... à voir pour modifier les décorateurs aussi.

Hors ligne

 

#4 12-05-2008 10:15:18

Bast
Membre
Date d'inscription: 07-06-2007
Messages: 138

Re: [1.5.1] [Zend_Form] Multiradios ?

J'avoue qu'un bout de code pour illustrer tout ça m'aurait aidé....

Hors ligne

 

#5 12-05-2008 11:27:25

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: [1.5.1] [Zend_Form] Multiradios ?

1. Création du décorateur retournant uniquement l'élément sans le label. Si tu dois entourer ton élément de style html, c'est ici.

Code:

class Formulaires_Decorators_OnlyContent extends Zend_Form_Decorator_Abstract
{
    public function buildInput()
    {
        $element = $this->getElement();
        return $element->getValue();
    }

    public function render($content)
    {
        $element = $this->getElement();
        if (!$element instanceof Zend_Form_Element) {
            return $content;
        }
        if (null === $element->getView()) {
            return $content;
        }

        $input     = $this->buildInput();
        $output = '<tr>
                . '<td class="input">'.$input
                .'</td></tr>';
        
         return $output;
    }
}
?>

2. Création de ton élément radio. Le code est pour un checkbox, à toi de remplacer.

Code:

class eltCheckbox extends Zend_Form_Element_Checkbox
{
    function __construct($name = "no-name", $label = "no-label", $id_opt = "no-opt", $class = "")
    {
        parent::__construct($name);
                            
        $this->setLabel($label);
        $this->setAttrib('id',$id_opt);
        $this->setAttrib('class',$class);
        $this->setCheckedValue('1');         //-- Les deux valeurs sont égales, sinon on ne récupère pas la bonne valeur dans populate
        $this->setUncheckedValue('1'); 
        
        $this->setValue('0');
            
           $this->addPrefixPath('Formulaires_Decorators', 'formulaires/decorators','decorator'); //-- chemin ou se trouve le décorateur créé
        $this->setDisableLoadDefaultDecorators(false); //-- zf utilisera que mon décorateur
        $this->addDecorator('OnlyContent'); //- Je passe le décorateur créé
    }

3. Dans le formulaire, c'est simple, tu indiques les chemins de la forme

Code:

        $this->addPrefixPath('Formulaires_Decorators','formulaires/decorators','decorator');
        $this->addElementPrefixPath('Formulaires_Decorators','formulaires/decorators','decorator');
       $check1 = new eltCheckbox('NOM1'); //-- pour toi ce sera RadioButton
       $checkn = new eltCheckbo('NOMxxx');
       $this->$this->addDisplayGroup( array(NOM1, NOM2, NOMxxxx ), 'bouton1'); //-- je place les checkbox dans un groupe
      $this->bouton1->setDecorators(array('GroupeDisplayBoutonTableau'));  //-- J'ai créé un décorateur pour afficher les éléments du groupe dans des balises <table> html

Tu vois, ce n'est pas très 'compliqué', mais il faut avoir bien compris le role des décorateurs et des éléments. En gros tu vas peut-être galéré pour mettre en place ton premier décorateur, mais après, c'est l'histoire de 5mn.

Bon courage

Dernière modification par whitespirit (12-05-2008 11:55:01)

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