2011-04-20 80 views
2

如果您正在閱讀本文,您可能知道定製Zend表單佈局會帶來多大的痛苦。我想實現的是一個佈局有點像這樣:Zend將輸入字段放在彼此旁邊

Name: [Type your first name here][Type your last name here] 
Address: [Type your street here][Type your number here][Type your addition here] 

有誰知道如何做到這一點,或任何人都可以指向我一個很好的例子嗎?

回答

2

我想要做的是爲窗體和不同類型的字段創建自定義裝飾器。

甲表單裝飾包圍表格元素

<form>%rows</form> 

甲行裝飾器的行

<div style="clear: both">%elements</div> 

的元件裝飾,顯示標籤和元件並浮所有向左

分離
<span style="float: left">%label</span>%left_floated_element 

一個元素裝飾器,只顯示元素並將其浮動到第Ë離開

%left_floated_element 

輸出會導致類似:

<!-- Form decorator output --> 
<form> 
    <!-- Extra decorator to make sure you get rows --> 
    <div style="clear: both"> 
     <!-- First element decorator output: label and element --> 
     <span style="float: left">Name</span><input type="text" name="firstname" style="float: left" .../> 
     <!-- Second element decorator output: just the element --> 
     <input type="text" name="lastname" style="float: left" .../> 
    </div> 
    <!-- Extra decorator to make sure you get rows --> 
    <div style="clear: both"> 
     <!-- First element decorator output: label and element --> 
     <span style="float: left">Address</span><input type="text" name="street" style="float: left" .../> 
     <!-- Second element decorator output: just the element --> 
     <input type="text" name="number" style="float: left" .../> 
     <!-- Second element decorator output: just the element --> 
     <input type="text" name="addition" style="float: left" .../> 
    </div> 
</form> 

您還可以更改使用了HTML建立一個表,而不是使用的div來完成這項工作。

查看Zend Framework手冊瞭解如何創建自己的自定義裝飾器的更多信息。

http://framework.zend.com/manual/en/zend.form.decorators.html

1

什麼結束了發生的事情,我認爲這是一般Zend_Form一個弱點,就是你經常要能夠自由地放置標籤,你認爲合適。創建一個定製的裝飾器是有意義的,如果你要重用一個顯示樣式 - 就像創建一個Sharepoint一樣的應用程序 - 但是在表單不會被重用的情況下,或者必須針對空間限制進行​​定製時,可視化風格等,爲每種情況創建裝飾器太昂貴。裝飾者應該是你的第二個度假勝地,即當你喜歡展示風格並希望在你的網站的任何地方使用它。

在O'Phinney的設計中,你可以做些什麼來解決這個nik nak的問題,那就是從裝飾器中刪除標籤,但仍然設置標籤。使用這樣的觀點:

$form->setDecorators(array('ViewScript',array('viewScript' => 'path/from/views/scripts/of/module')); 

在viewscript中,佈局html像正常。這樣您就不必爲每個想要的視覺/結構顯示變體創建任意結構。

$this->element->name; 

將產生無標籤字段。

$this>element->name->getLabel(); 

將產生標籤文本。

如果你需要一些援助,如何枚舉裝飾得到這個效果,通常舉例來說如果你使用Dojo的元素,你就必須

array('DijitElement','Errors','HtmlTag','Label') 

隨着你的裝飾。

只需放下標籤。如果標籤是這樣的陣列

array('Label',array(...)) 

刪除該數組,因爲它代表該裝飾器的配置。

但當然,在選項確保'label'=> 'desired label'設置。

現在,在您的形式中,您可以隨心所欲地放入這些元素,而不必拘泥於標籤的位置!

請注意,如果您在表單字段上使用裝飾器的默認設置,那麼您可能想知道默認裝飾器是什麼,因爲當您開始設置它們時,您可能會意外地錯過裝飾器並丟失一些東西。