Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-01-2012 03:01:22

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Label et Input dans le meme conteneur

Bonjour

Je voudrais tout simplement que les éléments de mon formulaire se présentent de la manière suivante :
<div><label>blablabla</label><input type="text" /></div>

J'utilise un fichier avec une classe personnalisée pour créer mes formulaires seulement avec mon code actuel j'obtiens plutôt :
<div><input type="text"></div><div><label>blablabla</label></div>

Mon code:
<?php

class Custom_Form extends Zend_Form
{
    public function __construct()
    {
        parent::__construct();
        $this->setMethod('POST');
    }
   
    public function render(Zend_View_Interface $view = null)
    {
        $this->setDecorators(array(
            array('FormErrors', array('markupElementLabelStart' => '<span class = "label">', 'markupElementLabelEnd' => '</span>')),
            'FormElements',
            'Form',
            array('Fieldset', array('id' => $this->getAttrib('id') . '_fieldset'))
        ));
        $elements = $this->getElements();
        foreach ($elements as $element) {
            if (strpos(get_class($element), 'Submit') !== false) {
                $element->setDecorators(array(
                    array('ViewHelper'),
                    array('HtmlTag', array('tag' => 'div', 'class' => 'FormElement FormSubmit', 'id' => $element->getName() . '_container')),
                    array('Description'),
                    array(
                        array('DtOpen' => 'HtmlTag'),
                        array('tag' => 'div', 'placement' => 'prepend', 'class' => 'clear')
                    )
                ));   
            } else if (strpos(get_class($element), 'File') !== false) {
                $element->setDecorators(array(
                    array('File'),
                    array('HtmlTag', array('tag' => 'div', 'class' => 'FormElement', 'id' => $element->getName() . '_container')),
                    array('Description'),
                    array(
                        array('labelDtClose' => 'HtmlTag'),
                        array('tag' => 'div', 'closeOnly' => true, 'placement' => 'prepend')
                    ),
                    array('Label'),
                    array(
                        array('labelDtOpen' => 'HtmlTag'),
                        array('tag' => 'div', 'openOnly' => true, 'placement' => 'prepend', 'class' => 'FormLabel', 'id' => $element->getName() . '_label')
                    )
                ));
            } else {
                $element->setDecorators(array(
                    array('ViewHelper'),
                    array('HtmlTag', array('tag' => 'div', 'class' => 'FormElement', 'id' => $element->getName() . '_container')),
                    array('Description'),
                    array(
                        array('DtOpen' => 'HtmlTag'),
                        array('tag' => 'div', 'placement' => 'append', 'class' => 'clear')
                    ),
                    array(
                        array('labelDtClose' => 'HtmlTag'),
                        array('tag' => 'div', 'closeOnly' => true, 'placement' => 'prepend')
                    ),
                    array('Label'),
                    array(
                        array('labelDtOpen' => 'HtmlTag'),
                        array('tag' => 'div', 'openOnly' => true, 'placement' => 'prepend', 'class' => 'FormLabel', 'id' => $element->getName() . '_label')
                    )
                ));
            }
        }
        return parent::render($view);
    }
}

Merci pour votre aide !!!

Hors ligne

 

#2 19-01-2012 09:09:50

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: Label et Input dans le meme conteneur

Si je ne me trompe pas, il faut que tu fasses comme ça:

Code:

array(
        'ViewHelper',
        'Label',
        array(array('row' => 'HtmlTag'), array('tag' => 'div'))
);

Hors ligne

 

#3 19-01-2012 14:20:10

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Re: Label et Input dans le meme conteneur

Merci Roromix pour ta réponse !

Hélas je viens de tester sa me fait :
<input type="text" /></div><div><label>blablabla</label>

Moi je cherche a obtenir :
<div><label>blablabla</label><input /></div>

J'ai essayé pendant 2 heures hier soir d'arriver à ce résultat sans succès !

Hors ligne

 

#4 19-01-2012 14:45:45

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: Label et Input dans le meme conteneur

De mon côté ça fonctionne...
J'obtiens:
<div><label class="optional" for="test">Test</label><input type="text" id="test" value="" name="test"></div>

Tu as fait quoi du code que je t'ai donné?

Dernière modification par Roromix (19-01-2012 14:49:47)

Hors ligne

 

#5 19-01-2012 15:07:51

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Re: Label et Input dans le meme conteneur

Code:

<?php

class Custom_Form extends Zend_Form
{
    public function __construct()
    {
        parent::__construct();
        $this->setMethod('POST');
    }
    
    public function render(Zend_View_Interface $view = null)
    {
        $this->setDecorators(array(
            array('FormErrors', array('markupElementLabelStart' => '<span class = "label">', 'markupElementLabelEnd' => '</span>')),
            'FormElements',
            'Form',
            array('Fieldset', array('id' => $this->getAttrib('id') . '_fieldset'))
        ));
        $elements = $this->getElements();
        foreach ($elements as $element) {
$element->setDecorators(array('ViewHelper','Label',array(array('row' => 'HtmlTag'), array('tag' => 'div'))
                ));
}
        return parent::render($view);
    }
}

Hors ligne

 

#6 19-01-2012 16:25:44

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Re: Label et Input dans le meme conteneur

Re Roromix

Autant pour moi sa fonctionne il fallait juste enlever cette partie du code :

$this->setDecorators(array(
            array('FormErrors', array('markupElementLabelStart' => '<span class = "label">', 'markupElementLabelEnd' => '</span>')),
            'FormElements',
            'Form',
            array('Fieldset', array('id' => $this->getAttrib('id') . '_fieldset'))
        ));

Merci beaucoup beaucoup !!!

Hors ligne

 

#7 20-01-2012 08:12:06

Roromix
Membre
Date d'inscription: 05-12-2011
Messages: 55

Re: Label et Input dans le meme conteneur

De rien.

Hors ligne

 

#8 22-01-2012 19:51:47

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Re: Label et Input dans le meme conteneur

Re-Bonjour,

Est-il possible d'ajouter un <br /> entre <label> et <input /> de manière a ce que le champ soit en dessous de l'étiquette ?

Pour insérer du code HTML dans un formulaire je créé et j'utilise la classe suivante :

class Application_Form_Decorator_ContentHTML extends Zend_Form_Decorator_Abstract
{
    public function render ($content)
    {
        return $content . $this->getOption('contentHTML'); 
    }
}

Puis j'ajoute mon code HTML dans mes décorateurs de la manière suivante :

array(new Application_Form_Decorator_ContentHTML(array('contentHTML' => '<br />')))

Seulement la je ne trouve pas ou mettre ce code de tel sorte a ce que j'obtienne :

<div><label>Etiquette</label><br /><input type="text" /></div>

Hors ligne

 

#9 22-01-2012 23:22:02

boulteu
Membre
Date d'inscription: 19-01-2012
Messages: 14

Re: Label et Input dans le meme conteneur

J'ai trouvé la solution !!!

Pour ceux que sa intéresse, il suffit d'ajouter dans les décorateurs avant le ViewHelper :

array(new Application_Form_Decorator_Html(array('Decorator_Html' => '<br />'))),

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