5

爲了造型的目的,我需要在一個元素的開始處放置一個開頭<div>,並在另一個元素的末尾放置一個關閉</div>標籤。查看HtmlDecorator的文檔,我似乎無法弄清楚如何正確使用它,或者如果這是使用正確的修飾器。爲了達到這個目的,創建我自己的裝飾者似乎很浪費。爲Zend表單元素添加或預先添加HTML標籤

回答

16

在要添加<DIV>的元素中,添加這個裝飾:

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

在要添加</DIV >的元素中,添加這個裝飾:

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

這正是我在這個特殊情況下所尋找的,謝謝! – ashurexm 2010-10-05 17:20:11

7

聽起來像你可以使用display groupHtmlTag裝飾器。

是這樣的:

$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')) 
)); 

這產生HTML如下:

<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> 

當然,干擾內所有<DL>,<DT>和<DD>一個<DIV>標籤瘋狂產生無效的標記,但我認爲你正在爲你的表單元素指定不同的裝飾器,以便於e <div>包裝你的慾望最終會有效。

對於更一般的標記操作還值得注意的是AnyMarkup Decorator

+0

DavidW,感謝您的好榜樣。我完全忘記了使用顯示組。 – ashurexm 2010-10-05 17:21:04

+0

我的榮幸;-) – 2010-10-05 17:45:57