Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je m'initie au Zend Framework à partir du tutoriel trouvé sur Developpez.com "[url=http://g-rossolini.developpez.com/tutoriels/php/zend-framework/debuter/}Débuter avec le Zend Framework, approche MVC[/url]".
J'ai adapté l'appli et j'ai pour le moment le formulaire suivant :
<dt> <label for="date_emission" class="required">Date d'émission (JJ/MM/AAAA):</label> </dt> <dd> <input type="text" name="date_emission" id="date_emission" value="24/03/2010" size="8"> </dd> <dt> <label for="sel_redacteur" class="optional">Rédacteur de la fiche :</label> </dt> <dd> <select name="sel_redacteur" id="sel_redacteur"> <option value="0" label=""></option> <option value="1" label="NOM1 Prénom1">NOM1 Prénom1</option> <option value="2" label="NOM2 Prénom2">NOM2 Prénom2</option> <option value="3" label="NOM3 Prénom3">NOM3 Prénom3</option> </select> </dd> <dt> <label for="redacteur" class="optional">Rédacteur (si pas dans liste) :</label> </dt> <dd> <input type="text" name="redacteur" id="redacteur" value=""> </dd>
Ce que je voudrais, c'est garder le dernier label "Rédacteur (si pas dans liste)", que je peux taper dans le code de la vue en HTML, et séparer la zone de texte en deux (nom et prénom) avec leurs labels mais sur la mème ligne que le le label "Rédacteur (si pas dans liste)".
Un truc dans le genre :
Rédacteur (si pas dans liste) : Nom : __________ Prénom :____________
Si j'ajoute simplement les deux zones de texte, elles s'afficheront sous le label "Rédacteur (si pas dans liste)" comme les autres champs.
J'ai essayé diverses choses, joué avec le CSS mais je cale.
Notamment, et pour un autre besoin sur le même formulaire, je ne trouve pas comment afficher seulement la zone de texte.
J'ai découvert qu'on peut afficher séparément la description, ou le label mais la zone de texte je n'y arrive pas.
<?php echo $this->form->description->getLabel() ;?> <?php echo $this->form->description->getDescription() ;?> <?php echo $this->form->description->/*quelle propriété pour la zone de saisie ?*/ ;?>
Dernière modification par CinePhil (08-04-2010 18:09:53)
Hors ligne
Hello,
j'en profite pour UP ton topic car ça m'intéresse également.
Hors ligne
C'est une question à la fois de décorateur et CSS.
Voici une technique (y'en a surement d'autre, mais c'est celle qui me vient à l'esprit immédiatement)
Le but est donc de supprimé les tags </dd><dd> qui sont entre tes elements qui tu veux mettre sur une même ligne.
Pour ca, il faut avec le décorateur htmlTag, utilisé les attributs openOnly pour le premier élément et closeOnly pour le dernier élements.
Ainsi, pour l'élément 1 :
array( 'ViewHelper', 'Label', array('HtmlTag', array('tag' => 'dd', 'openOnly' => true, 'class' => 'uneclassaucasou')));
Pour l'élément 2:
array( 'ViewHelper', array('HtmlTag', array('tag' => 'dd', 'closeOnly' => true)));
Ainsi, tu auras qqchose du genre :
<dd class="uneclassaucasou"> <label> <input ...> <input ...> </dd>
Je te laisse faire un peu de CSS si nécessaire
Hors ligne
Je me suis débrouillé autrement.
D'abord j'ai supprimé les paramètres de décoration et j'ai appliqué ces nouveaux décorateurs vides aux champs à aligné sur la même ligne :
$elementDecorators = array(array('ViewHelper'), array('Errors'), array('Label') ); $nom_emetteur = new Zend_Form_Element_Text('nom_emetteur', array('size' => 15)); $nom_emetteur ->setLabel('Nom :') ->addFilter('StripTags') ->addFilter('StringTrim') ->setDecorators($elementDecorators); $prenom_emetteur = new Zend_Form_Element_Text('prenom_emetteur', array('size' => 15)); $prenom_emetteur->setLabel('Prénom :') ->addFilter('StripTags') ->addFilter('StringTrim') ->setDecorators($elementDecorators);
Ensuite dans la vue, j'ai trouvé comment afficher séparément tout ça et j'ai joué avec des <span> et du CSS :
<form method="<?php echo $this->form->getMethod() ?>" action="<?php echo $this->form->getAction()?>"> <?php echo $this->form->date_emission ;?> <?php echo $this->form->sel_emetteur ;?> <?php echo $this->form->sel_service ;?> <dt> <span class="multi_label">Émetteur (si pas dans liste) :</span> <span class="label_seul"><?php echo $this->form->nom_emetteur->renderLabel() ;?></span> <span class="label_seul"><?php echo $this->form->prenom_emetteur->renderLabel() ;?></span> <span class="label_seul"><?php echo $this->form->service->renderLabel() ;?></span> </dt><br /> <span class="multi_label"> </span> <dd> <span class="champ_seul"><?php echo $this->form->nom_emetteur->renderViewHelper() ;?></span> <span class="champ_seul"><?php echo $this->form->prenom_emetteur->renderViewHelper() ;?></span> <span class="champ_seul"><?php echo $this->form->service->renderViewHelper() ;?></span> </dd><br /> <?php echo $this->form->titre ;?> <?php echo $this->form->description ;?> <?php echo $this->form->services_pouvant_repondre ;?> <?php echo $this->form->solution ;?> <?php echo $this->form->submit ;?> </form>
.multi_label { width: 300px; float: left; } .label_seul { font-style: italic; font-size: 80%; vertical-align: text-bottom; float: left; width: 150px; } .champ_seul { float: left; width: 150px; }
A l'occasion je regarderai cette histoire de openOnly et closeOnly. Je me bats avec autre chose maintenant (le binding des paramètres dans les requêtes).
Hors ligne
Pages: 1