5

Ai fini dello stile, ho la necessità di inserire un'apertura <div> all'inizio di un elemento e un tag di chiusura </div> alla fine di un altro. Guardando oltre i documenti per HtmlDecorator non riesco a capire come farlo bene, o se questo è anche il decoratore giusto da usare. Sembra inutile dover creare il mio decoratore semplicemente per raggiungere questo obiettivo.Aggiunta o sospensione di tag HTML a Zend Form Element

risposta

16

Sulla elemento in cui si desidera aggiungere un <div>, aggiungere questo decoratore:

array(
    array('openDiv' =>'HtmlTag'), 
    array('tag' => 'div', 'openOnly' => true) 
) 

Sulla elemento in cui si desidera aggiungere un </div >, aggiungere questo decoratore:

array(
    array('closeDiv' =>'HtmlTag'), 
    array('tag' => 'div', 'closeOnly' => true) 
) 
+0

Questo è esattamente quello che sto cercando in questo caso particolare, grazie! – ashurexm

7

Suoni come si potrebbe usare un display group con un decoratore HtmlTag.

Qualcosa di simile:

$form = new Zend_Form(); 

$form->addElement('text', 'elt1', array(
    'label' => 'Element 1', 
)); 
$form->addElement('text', 'elt2', array(
    'label' => 'Element 2', 
)); 

$form->addDisplayGroup(array('elt1', 'elt2'), 'myDisplayGroup'); 
$group = $form->getDisplayGroup('myDisplayGroup'); 

$group->setDecorators(array(
    'FormElements', 
    array('HtmlTag', array('tag' => 'div', 'class' => 'myClass')) 
)); 

Questo produce HTML come segue:

<form method="post" action="" enctype="application/x-www-form-urlencoded"> 
    <dl class="zend_form"> 
     <div class="myClass"> 
      <dt id="elt1-label"><label class="optional" for="elt1">Element 1</label></dt> 
      <dd id="elt1-element"><input type="text" value="" id="elt1" name="elt1"></dd> 
      <dt id="elt2-label"><label class="optional" for="elt2">Element 2</label></dt> 
      <dd id="elt2-element"><input type="text" value="" id="elt2" name="elt2"></dd> 
     </div> 
    </dl> 
</form> 

Naturalmente, inceppamenti un <div> tag all'interno di tutto ciò che <dl>, <dt> e <dd> la follia produce un markup non valido, ma presumo che tu stia specificando decoratori diversi per i tuoi elementi di forma in modo che th e <div> avvolgere il tuo desiderio alla fine sarà valido.

Notevole anche per manipolazioni di markup più generali è AnyMarkup Decorator.

+0

DavidW, grazie per l'ottimo esempio. Ho completamente dimenticato di usare i gruppi di visualizzazione. – ashurexm

+0

Il mio piacere ;-) –