2010-08-01 4 views
0

Je suis en train d'ajouter Zend_Form_Elements suivant les boutons radio dans ma forme, mais jusqu'à présent j'ai été incapable de le faire. Si quelqu'un pouvait me diriger dans la bonne direction, ce serait grandement apprécié. Formulaire doit être rendu comme indiqué ci-dessous:Zend_Form: Ajouter des éléments à boutons radio

(*) [____]% 

() [____]€ 

() [___] for [___] 

Répondre

0

Utilisez forme decorators et le style CSS pour l'entrée que vous voulez.

Vous woulduse un décorateur forn de réécrire le balisage pour votre formulaire. Mais c'est tout un défi franckly et peut-être votre meilleur pari est un formulaire viewScript. Il est très facile à mettre en œuvre et vous donne 100% de contrôle sur le code HTML pour le formulaire. Regardez

Exemple: Personnalisation complète Utilisation du décorateur ViewScript

Dans l'exemple que je LIÉ.

+0

C'est une réponse incroyablement vague. Vous voulez être un peu plus précis? – Andy

0

Que diriez-vous quelque chose comme ceci:

class My_RadioForm extends Zend_Form 
{ 
    public function init() 
    { 
     $this->addElement('radio', 'myradio', array(
      'label' => 'Select an option below', 
      'multiOptions' => array(
       'val1' => 'Text 1', 
       'val2' => 'Text 2', 
       'val3' => 'Text 2', 
      ), 
     )); 
    } 

}

Pour un rendu très précis, @iznogood est juste: dois entrer dans tout ce que l'entreprise de décorateur.

+0

Salut à tous. C'est à peu près le code que j'ai déjà à ma disposition. Le problème est que j'ai besoin d'insérer des éléments entre les itérations, sinon ce serait simplement une liste de boutons radio. Si j'ai besoin d'entrer dans les décorateurs, que devrais-je faire? Ajouter et/ou supprimer des décorateurs? Créer le mien? «Utiliser des décorateurs de formulaires» est terriblement non spécifique. – Andy

0

Vous pouvez utiliser docorators si elle est seulement une question de balises d'entrée de positionnement. Vous pouvez le faire en écrasant/modifiant le décorateur FormElements par défaut, par exemple en ajoutant la propriété float: left style à un élément de formulaire particulier. La poursuite de l'exemple de David:

$this->addElement('radio', 'myradio', array(
     'label' => 'Select an option below', 
     'multiOptions' => array(
      'val1' => 'Text 1', 
      'val2' => 'Text 2', 
      'val3' => 'Text 2', 
     ), 
     'decorators' => 
      array(
      'ViewHelper', 
      'Errors', 
      'Description', 
      array('HtmlTag', array('tag' => 'dd', 'style' => 'float: left')), 
      'Label' 
     ) 
)); 

Il y a aussi une méthode setDefaultDecorators(), qui vous permet d'écraser tous les décorateurs éléments sous forme entière.

solution plus avancée si pour créer des éléments composites - http://weierophinney.net/matthew/archives/217-Creating-composite-elements.html - à savoir l'élément de formulaire personnalisé contenant des étiquettes d'entrée multiples. Vous avez ainsi plus de contrôle sur la logique métier de votre formulaire.

+0

Ce n'est pas ce que je veux du tout, en fait. Je veux une méthode pour insérer des éléments à côté des boutons radio. L'implémentation actuelle ne permet que l'insertion d'étiquettes (voir 'Texte 1', 'Texte 2' etc. dans votre exemple). Le simple fait de déplacer des choses avec CSS détruirait le flux naturel de la page. – Andy

+1

Vous devez ensuite créer vos propres éléments de formulaire composite. – Ernest

Questions connexes