2010-08-01 138 views
0

我试图添加Zend_Form_Elements在我的表单中的单选按钮,但到目前为止我一直无法这样做。如果任何人可以指出我在正确的方向,将不胜感激。表单需要呈现如下图所示:Zend_Form:添加元素到单选按钮

(*) [____]% 

() [____]€ 

() [___] for [___] 

回答

0

使用形式decorators和CSS,你想要的样式输入。

您会使用forn装饰器重写表单的标记。但是,这是一个非常挑战性的问题,也许你最好的选择是一个formScriptScript。有很容易实现,并让您100%的表单的HTML控制。看看

例子:完全自定义使用ViewScript装饰

在我联系的例子。

+0

这是一个令人难以置信的含糊答案。关心更精确一点? – Andy 2010-08-02 06:55:40

0

怎么是这样的:

class My_RadioForm extends Zend_Form 
{ 
    public function init() 
    { 
     $this->addElement('radio', 'myradio', array(
      'label' => 'Select an option below', 
      'multiOptions' => array(
       'val1' => 'Text 1', 
       'val2' => 'Text 2', 
       'val3' => 'Text 2', 
      ), 
     )); 
    } 

}

非常特殊的渲染,@iznogood是正确的:总得进入所有的装饰企业。

+0

你好。这几乎是我已经拥有的代码。问题是我需要在迭代之间插入元素,否则它只是一个简单的单选按钮列表。如果我需要进入装饰器,我需要做什么?添加和/或删除装饰器?创建我自己的? '使用表单装饰'是非常不明确的。 – Andy 2010-08-02 12:59:27

0

如果只是定位输入标签,您可以使用docorators。您可以通过覆盖/修改默认的FormElements装饰器来实现,例如,通过将float:left样式属性添加到特定的表单元素。从大卫的继续示例:

$this->addElement('radio', 'myradio', array(
     'label' => 'Select an option below', 
     'multiOptions' => array(
      'val1' => 'Text 1', 
      'val2' => 'Text 2', 
      'val3' => 'Text 2', 
     ), 
     'decorators' => 
      array(
      'ViewHelper', 
      'Errors', 
      'Description', 
      array('HtmlTag', array('tag' => 'dd', 'style' => 'float: left')), 
      'Label' 
     ) 
)); 

还有一个setDefaultDecorators()方法,它允许您覆盖所有元素装饰在整个表格。

更高级的解决方案,用于创建复合元素 - http://weierophinney.net/matthew/archives/217-Creating-composite-elements.html - 即包含多个输入标签的自定义表单元素。您可以通过这种方式更好地控制表单业务逻辑。

+0

实际上,这不是我想要的。我想要一个在单选按钮旁边插入元素的方法。目前的实现只允许插入标签(参见示例中的'文本1','文本2'等)。简单地使用CSS来移动会破坏页面的自然流动。 – Andy 2010-08-03 10:28:53

+1

你应该创建你自己的复合表单元素。 – Ernest 2010-08-03 10:49:56