在Zend_Form_Element Radio中包装标签

时间:2011-03-13 16:45:58

标签: php zend-framework zend-form-element zend-decorators

也许有人知道。如何包装Zend_Form_Element_Radio,包括整个无线电输入堆栈的标签(带有输入标签)。

public $radioDecorators = array(
    'ViewHelper',
    array('Description',array('tag'=>'div','class'=>'','placement' => 'prepend')),
    array('Errors',array('class'=>'error_message_show','placement' => 'prepend')),
    array(array('data' => 'HtmlTag'), array('tag' => 'div', 'class' => 'element')),
    array('label', array('class'=>'label_text','placement' => 'prepend')),
    array(array('rows' => 'HtmlTag'), array('tag' => 'div', 'class' => 'radio')),
);


    $offer_type = new Zend_Form_Element_Radio('offer_type', array(
                'label' => 'Label I'd like to wrap with inputs',    //Label to wrap
                'required' => true,
                'description' => '',
                'decorators' => $this->radioDecorators,
                'multioptions' => array (
                    'standard' => 'standard',
                    'premium' => 'premium',
                ),
            ));
    $this->addElement($offer_type);

上面的例子没有解决我的问题,因为它只包含几个输入标签。

1 个答案:

答案 0 :(得分:2)

我想我知道你在追求什么,如果是的话,你很幸运,因为我前几天不得不这样做。

标准ZF多选项元素使用separator属性分隔每个“选项”(默认为<br />用于无线电,新线用于选择)。这适用于<option>元素,但对于一组单选按钮非常粗制滥用。

解决方案是

  • 将HtmlTag装饰器添加到元素中,包装内容
  • 将分隔符设置为关闭并重新打开HtmlTag

例如,这是一个将输入集合包装在无序列表中的解决方案

$offer_type = new Zend_Form_Element_Radio('offer_type', array(
    'separator' => '</li><li>',
    'decorators' => array(
        'ViewHelper',
        array(array('liWrapper' => 'HtmlTag'), array('tag' => 'li')),
        array(array('ulWrapper' => 'HtmlTag'), array('tag' => 'ul')),
        // the rest
    )
));

另一种方法是编写自己的视图助手。创建自己的formRadio版本应该非常简单。