Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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 :
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é
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 .
Hors ligne
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
J'avoue qu'un bout de code pour illustrer tout ça m'aurait aidé....
Hors ligne
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.
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.
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
$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