如果您正在閱讀本文,您可能知道定製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]
有誰知道如何做到這一點,或任何人都可以指向我一個很好的例子嗎?
如果您正在閱讀本文,您可能知道定製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]
有誰知道如何做到這一點,或任何人都可以指向我一個很好的例子嗎?
我想要做的是爲窗體和不同類型的字段創建自定義裝飾器。
甲表單裝飾包圍表格元素
<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
什麼結束了發生的事情,我認爲這是一般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'
設置。
現在,在您的形式中,您可以隨心所欲地放入這些元素,而不必拘泥於標籤的位置!
請注意,如果您在表單字段上使用裝飾器的默認設置,那麼您可能想知道默認裝飾器是什麼,因爲當您開始設置它們時,您可能會意外地錯過裝飾器並丟失一些東西。