Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
Si je ne me trompe pas, il faut que tu fasses comme ça:
array( 'ViewHelper', 'Label', array(array('row' => 'HtmlTag'), array('tag' => 'div')) );
Hors ligne
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
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
<?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
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
De rien.
Hors ligne
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
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