2010-01-25 5 views
4

Comment puis-je obtenir les résultats suivants avec les décorateurs de formulaire pour les éléments de formulaire:décorateurs Zend Form trouble

<dt> 
    <ul> 
    <li>The errors</li> 
    <li>The errors</li> 
    </ul> 
    <label>The label</label> 
</dt> 
<dd> 
    <input type="text" value="The input field"> 
</dd> 

En d'autres termes, au lieu des erreurs jointes après le champ d'entrée, je veux les préfixés avant que l'étiquette. I do cependant vouloir conserver les étiquettes <dt> et <dd> comme illustré ci-dessus.

Répondre

5

D'accord, j'ai découvert comment le faire. Peu à peu, les décorateurs commencent à faire sens pour moi:

$decorators = array(
'Label', 
array('Errors', array('placement' => 'prepend')), 
array(array('dt' => 'HtmlTag'), array('tag' => 'dt')), 
array(array('ddOpen' => 'HtmlTag'), array('tag' => 'dd', 'openOnly' => true, 'placement' => 'append')), 
array('ViewHelper'), 
array(array('ddClose' => 'HtmlTag'), array('tag' => 'dd', 'closeOnly' => true, 'placement' => 'append')) 
); 

Ce que cela fait est la suivante:

  1. premier rendu de l'étiquette
  2. Ensuite, ajoutez la mention (par défaut = append) les erreurs
  3. Envelopper (par défaut) tout le contenu précédent dans un HtmlTag (dt)
  4. Ensuite, ajoutez (default = wrap) une ouverture HtmlTag (dd)
  5. n append (par défaut) le ViewHelper
  6. Ensuite, ajoutez (par défaut = wrap) une HtmlTag fermeture (dd)

Définissez ensuite les décorateurs:

// be sure to only set them, after you have added the relevant elements to the form 
$this->setElementDecorators($decorators); 

PS:
Rendez-vous compte bien que mon exemple particulier produit invaliid html. ;-) J'ai seulement découvert plus tard que <ul> éléments ne sont pas autorisés dans <dt> éléments avec DOCTYPEHTML 4.01 strict

+0

Assurez-vous que vous acceptez votre réponse, il apparaît comme résolu :) – jhogendorn

+0

je veux, mais vous ne pouvez pas accepter votre propre répondez dans les 24h. –

0

Dans votre classe de formulaire, essayez ceci:

$this->setElementDecorators(array(
    'Errors', 
    'ViewHelper', 
    'Label', 
)); 
+0

Cela ne le coupe pas j'ai peur. Il en résulte '

    ', 'et sans
    ' et ''
    's –