Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour !
J'ai encore un soucis sur la mise en page de mes elements.
Je veux permettre de choisir une heure dans un formulaire.
Celle-ci est décomposé en 2, les heurs, et les minutes. Ce sont des select.
Comment faire pour les alignés ?
Car, si je les configures comment tous mes autres elements, mes décorateurs vont les séparés et donc ca sera l'un en dessous de l'autre.
Comment faire ?
Merci
Dernière modification par nORKy (31-03-2008 15:30:17)
Hors ligne
Utilise l'attribue "class" ou "id" pour identifier tes balises (de ton decorateur) et les propiétés "float" et "clear" de CSS pour l'alignement !
Une mise en page, peut-être intégralement géré, depuis un CSS. Du moment bien sûr que la structure de ton form, soit construite autour de DIV !
Pour aligner (faire suivre) plusieurs DIV successivement utilise:
float: left
Pour retourner la div suivante, utilise
clear: both
Voila
Hors ligne
Ce n'est pas un problème de CSS.
Mais de Zend_Form et de ses décorateurs.
Exemple, voici le code classique (j'ai abrégé)
[...] $start_hour = new Zend_Form_Element_Select('start_hour'); $start_hour->setLabel('Début de plage horaire:'); $start_hour->setRequired(true); $start_hour->addMultiOptions(range(0, 23)) $start_min = new Zend_Form_Element_Select('start_min'); $start_min->addMultiOptions(range(0, 59)) $this->addElements(array( $comment, $start_date, $start_hour, $start_min, $end_time, $end_date, $submit )); $this->setDecorators(array( 'FormElements', 'Form' )); $this->setElementDecorators(array( array('ViewHelper'), array('Label', array('tag' => null, 'separator'=>' ')), array('HtmlTag', array('tag' => 'p')), )); $submit->removeDecorator('Label');
Sachant biensur que j'ai d'autre elements autour de ceux-ci.
Actuellement ca donne ca :
<p><label for="start_hour" tag="" class="required">Début de plage:</label> <select name="start_hour" id="start_hour"> <option value="0" label="0">0</option> [...] </select></p> <p> <select name="start_min" id="start_min"> <option value="0" label="0">0</option> [...] </select></p>
Moi, je voudrais que ces 2 elements soit 'ensemble' :
<p><label for="start_hour" tag="" class="required">Début de plage:</label> <select name="start_hour" id="start_hour"> <option value="0" label="0">0</option> [...] </select> <select name="start_min" id="start_min"> <option value="0" label="0">0</option> [...] </select></p>
J'ai bien essayé avec addDisplayGroup, mais... ca par en vrille
Dernière modification par nORKy (31-03-2008 16:33:57)
Hors ligne
Pourquoi n'utilises-tu pas ton propre Decorateur ? En gros, tu structure ton Form à ta sauce !
Hors ligne
Pourquoi pas.. je vais essayé
Hors ligne
Salut, je pense que tu devrais faire un tour du côté du DisplayGroup avec lequel tu devrais pouvoir faire ce que tu veux.
Hors ligne
Salut,
Alors après plein d'essais, j'ai réussi à obtenir quelque chose de cohérent en utilisant les "subForm". En gros j'ai le même problème que toi je voudrais afficher une suite de champs "Select" pour que mes membres puissent enregistrer leur date de naissance, et bien sur comme c'est souvent le cas on a un champs pour le jour, le mois et l'année. Donc apres pas mal de recherche j'ai utilisé un "Subform" sans déclarer son décorateur "Form" ce qui m'a permis d'obtenir ce que je voulais en suite je l'ai intégré dans mon formulaire. Je ne sais pas si c'est la bonne solution, si quelqu'un a une meilleur solution car je tâtonne pour l'instant.
Hors ligne
Salut,
Après plusieurs essais, voici la solution en passant par les "DisplayGroup". Ca me semble plus logique de passer par le "DisplayGroup" que par les "subForm".
Voici un petit code (Enfin, petit est un grand mot ) qui permet d'aligner dans une balise p plusieurs input de type submit.
//initialisation d'un objet Form $form = new Zend_Form(); //mise en forme du form $form ->setAction('') ->setMethod('post') ->setDecorators( array( 'Errors', 'FormElements', 'Form' ) ); //Ajout et mise en forme des éléments $form ->addElement( //type de l'élément 'submit', //Nom de l'élément 'Cancel', //options de l'élément array( 'label'=>'Annuler', 'decorators'=>array('ViewHelper'), ) ) ->addElement( 'submit', 'Previous', array( 'label'=>'<< Precedent', 'decorators'=>array('ViewHelper'), ) ) ->addElement( 'submit', 'Next', array( 'label'=>'Suivant >>', 'decorators'=>array('ViewHelper'), ) ) ->addElement( 'submit', 'Finish', array( 'label'=>'Terminer', 'decorators'=>array('ViewHelper'), ) ); //Création des groupes $form ->addDisplayGroup( //Elements à grouper array( 'Previous', 'Next', 'Finish' ), //Nom du groupe 'actions' ) ->addDisplayGroup( //Elements à grouper array( 'Cancel' ), //Nom du groupe 'annuler' ); //Mise en forme du groupe 'annuler' $form //appel du groupe 'annuler' ->annuler ->setDecorators( array( 'FormElements', array( 'HtmlTag', array( 'tag'=>'p', 'class'=>'Button_Annuler', 'style'=>'padding:5px;float:left;background-color:blue;clear:left' ) ) ) ); //Mise en forme du groupe 'actions' $form ->actions ->setDecorators( array( 'FormElements', array( 'HtmlTag', array( 'tag'=>'p', 'class'=>'Buttons_Actions', 'style'=>'padding:5px 5px 5px 50px;float:left;background-color:red;clear:right;' ) ) ) ); //Placement du groupe 'actions' $form->annuler->setOrder(0); //Placement du groupe 'annuler' $form->actions->setOrder(1);
ce qui te donnera comme code ceci :
<form enctype="application/x-www-form-urlencoded" action="" method="post"> <p class="Button_Annuler" style="padding:5px;float:left;background-color:blue;clear:left"> <input type="submit" name="Cancel" id="Cancel" value="Annuler" /> </p> <p class="Buttons_Actions" style="padding:5px 5px 5px 50px;float:left;background-color:red;clear:right;"> <input type="submit" name="Previous" id="Previous" value="<< Precedent" /> <input type="submit" name="Next" id="Next" value="Suivant >>" /> <input type="submit" name="Finish" id="Finish" value="Terminer" /> </p> </form>
Voilà, je pense que tu arriveras à te débrouiller avec ce bout de code.
Hors ligne
Ok, j'ai compris, j'ai bien essayé avec displaygroup, mais j'avais pas réussit.
Je devrais y arrivé avec ca !
Merci
Hors ligne
Pages: 1