2016-02-29 110 views
0

Brief如何控制Zend Form中的單個表單元素呈現?

我正在使用Zend Form庫。我希望能夠對無線電盒子的構造方式進行設計或控制。目前,該元素的渲染是「在一行中」。然而,我想要做的是按照自己的方式呈現每個選項。庫似乎沒有提供簡單的注入,即<br>標籤,這正是我通常在我的HTML中使用的標籤。無論如何,我需要幫助弄清楚如何讓圖書館滿足我的需求。

控制器

use Zend\Form\Element; 
    use Zend\Form\Form; 

    $radio = new Element\Radio('gender'); 

    $radio->setValueOptions(array(
     '1' => 'Male', 
     '2' => 'Female', 
     '3' => 'Other',    
    )); 
    $radio->setValue(2); 

在View

<?=$this->formRadio($this->form->get('gender'));?> 

元素可觀測呈現爲

* Male * Female * Other 

想要元素呈現爲

* Male 
* Female 
* Other 

如何?

樣本HTML渲染

<form class='my-form'> 
    <table> 
     <tr> 
      <td> 
       <label><input name="gender" type="radio" value="1">Male</label> 
       <label><input name="gender" type="radio" value="2">Female</label> 
      </td> 
     </tr> 
    </table> 
</form> 

回答

1

可以側步Zend框架完全和節省一些頁面重量(不使用br標籤),通過使用CSS來解決這個問題。

只需查看用於呈現列表項的重複元素的標記或類名(聽起來像是一個無線電輸入),並將其設置爲垂直顯示而不是水平顯示。

一個例子:

.my-form input[type="radio"] { 
    display: block; 
} 

這將是比在Zend的定製渲染裝飾更快,更簡單。

編輯:現在你已經提供了確切的HTML,這裏有一些改進。

1)輸入嵌套在標籤內,因此您將修改標籤的顯示而不是輸入。

.my-form label { 
    display: block; 
} 

2)呈現的表單(如果確切的話)當前沒有類名。如果表單永遠不會在頁面上多次使用,那麼您將不得不將CSS中的選擇器更改爲使用ID表示法。

#myform label而不是.my-form label

否則,您可以使用Zend的setAttribute功能添加一個類名像這樣。

$form -> setAttribute('class', 'my-form');

+0

我這樣做並呈現爲無線電框「男性」在第1行,無線電值2號線,然後無線電框「女性」第3行等的元素。我想在同一行上保留單選框和值 – Dennis

+0

如果您粘貼呈現的HTML,我可以向您展示這些修補程序的樣式。 –

+0

謝謝。我把它粘貼到我的問題 – Dennis

相關問題