2

我有一個zend裝飾器的問題,無法弄清楚如何放置一個元素的形式,我想要他。ZEND - 裝飾者和元素的位置?

我得到了一個表單,其中裝飾器將我的數據放入表格中,但我希望將表格提交出來。現在我有類似的東西:

for ($i = 0; $i < $numRows; $i++) { 
    $select = new Zend_Form_Element_Select('article' . $i); 
    $select->setAttrib('style', 'margin-top:10px;width:200px;'); 
    $select->addMultiOption('1', $this->translate->_('Zatwierdzony do druku')); 
    $select->addMultiOption('0', $this->translate->_('Niezatwierdzony do druku')); 
    $select->setValue($rows[$i]['reviewed']); 
    $select->setDecorators(
     array(
     'ViewHelper', 
     array(
      array('data' => 'HtmlTag'), 
      array('tag' => 'td', 'class' => 'padding5 tdcenter') 
     ), 
      array(
       'AnyMarkup', 
       array(
        'markup' => $this->_getMarkupForRow($i, $rows), 
        'placement' => 'PREPEND', 
       ) 
      ), 
     array(
      array('row' => 'HtmlTag'), 
      array('tag' => 'tr', 'openOnly'=>true) 
     ), 
    ), 
     array('submit'), 
     false 
); 
    $this->addElement($select); 
} 

$submit = new Zend_Form_Element_Submit('updatetoprint'); 
$submit->setAttrib('id', 'updatetoprint'); 
$submit->setLabel('Zapisz'); 
$submit->setDecorators(
    array(
    'ViewHelper', 
    array(
     array('data' => 'HtmlTag') 
    ), 
    array(
     array('row' => 'HtmlTag'), 
     array('tag' => 'div', 'closeOnly'=>true,'style' => 'float:left;') 
    ) 
    //here i dont know how to get my submit on the bottom under the table...? 
    ), 
    array('submit') 
); 
$this->addElement($submit); 

在現場,看起來像這樣: my form

,我想有我提交表格下方的底部......請大家幫幫我: )

回答

3

我沒有看到你將表單分配給視圖,或者如果你的表單是一個Zend_Form或不是,所以我要做一些假設。
我會假設你使用Zend_Form的建立自己的形式,我會假設你是一個控制器動作
$this->view->form = $form;
與 所以被裏面說你的分配形式向視圖在傳統的方式,您的視圖腳本,你只需
<?php echo $this->form->elemenetName ?>
其中elementName爲你給你的元素在你的情況你的提交按鈕的名稱爲「updatetoprint」名稱訪問每個元素。
考慮到這一點,如果您需要創建表格或任何其他佈局,您可以簡單地在表單中創建通用元素,並根據需要將其添加到任何視圖腳本中。可能會阻止你與裝飾者一起執行所有這些體操。

例如view.phtml可能看起來像:

<form action="<?php echo $this->form->getAction() ?>" method="<?php echo $this->form->getMethod() ?>"> 
    <table> 
     <tr> 
     <th>Dodal</th> 
     <th>Tutyl</th> 
     <th>Status</th> 
     </tr> 
    <!--you should probably put the next 5 lines into a partial and use partialLoop($data)--> 
     <tr> 
     <td><?php echo $this->form->dodal ?></td> 
     <td><?php echo $this->form->tutyl ?></td> 
     <td><?php echo $this->form->status ?></td> 
     </tr> 
    </table> 
    <?php echo $this->form->updatetoprint ?> 
    </form> 

然後只需用css樣式。

要設置形式使用viewscript只需使用:

$form->setDecorators(array(
    'PrepareElements', 
    array('ViewScript', array('viewScript' => 'form.phtml')), 
)); 

其中form.phtml是你的viewscript名

[編輯] 進一步考慮後,我意識到,diplaying表單元素以這種方式有一個嚴重的缺點。表單從未初始化...表格標籤永遠不會發送。這個編輯是爲了糾正這個問題。
對不起,花了這麼長的時間

+1

事實上,裝飾者體操(ha!)和將表單元素放入視圖腳本之間的中間方法是簡單地使用一個Viewscript裝飾器。如果您在應用程序的多個位置使用表單,這一點尤其有用。 – 2012-02-11 03:29:42

+1

@David Weinraub對於ZF來說,這是一件真正喜愛的事情,幾乎總是有許多不同的解決方案來解決問題。我還沒有探討過Viewscript裝飾器,但我確信我會在某個時候有一個理由。 – RockyFord 2012-02-11 06:11:17

+0

仍然有問題獲取數據部分和不知道如何得到這個愚蠢anymarkup到它該死......我討厭ZF裝飾者...它的生病:(編輯:我只是使顯示一些其他方法的ID,但我不知道如何使其成爲一種形式(我可以手動添加表單標籤,但它不是一個好的解決方案,我認爲...因爲當我通過你的方法,並添加viewScript(也許我做錯了)我的提交按鈕不活動我不能改變。我的CSS在頁面上搞亂了,一切都改變了(壞)我不知道該怎麼做... – DarAss 2012-02-13 03:53:35

1

我建議除了提交按鈕之外,將所有元素添加到顯示組。然後給顯示組一個HtmlTag裝飾器(將標籤設置爲表格),它將用表格包裝所有元素,使得HTML有效併爲您提供所需的佈局。

+0

我試圖沒有結果...我不知道我在哪裏犯了一個錯誤..但顯示組不工作... – DarAss 2012-02-10 01:52:40

1

我看到很多<tr><td>標籤,但沒有<table>標籤。我認爲你正在尋找的是標記大致是這樣的:

<table> 
    <tr><td>info</td><td>more info</td><td>select element</td></tr> 
    <tr><td>info</td><td>more info</td><td>select element</td></tr> 
    <tr><td>info</td><td>more info</td><td>select element</td></tr> 
</table> 
<div> 
    <input type="submit"> 
</div> 

什麼似乎是從你的代碼所缺少是產生<table></table>標籤任何裝飾。因此,在循環的第一次迭代中,使用AnyMarkup裝飾器預先配置<table>和標題行。在最後一次迭代中,添加一個附加</table>標記的裝飾器。

然後您的提交按鈕(最後添加)應該坐在下面。

+0

表標記是在我的phtml文件因爲我需要像Dodałt,Tytuł等這些在phtml中手動添加的標題。多數民衆贊成在表格標籤是不合格的。當我在製作表格標籤的時候,它實際上並沒有工作......效果和上面一樣。是的,我想要像上面描述的那樣有結構。但是,如果我在表格標籤內部形成如何手動添加頭像Dodał,Tytył和狀態等..我不知道該怎麼做... – DarAss 2012-02-10 01:52:09

+0

那麼這就是問題的本質:如果你的視圖腳本腳本包含開放/關閉表格標籤以及表格之間的內容,那麼表單中的提交按鈕*不能在該表格之外出現。因爲你已經熟悉AnyMarkup裝飾器,所以我把表格渲染成實際上更容易的形式。我會更新答案。 – 2012-02-10 02:28:55

+0

我知道如何獲得表格腳本內的表格標籤,但如果我這樣做,我不打結如何仍然有表格的標題。等待您的答案更新:) – DarAss 2012-02-10 02:51:49