带有单选按钮的Zend装饰器?

时间:2011-07-29 21:20:24

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

如何将Zend默认提供的标准dt和dd标签转换为使用ul和li作为单选按钮列表?

以便最终结果是:

ul tag

li tag单选按钮1结束li标签

li tag单选按钮2结束li标签

li tag单选按钮3结束li标签

结束ul标签

而不是dl dt标签。

感谢。

1 个答案:

答案 0 :(得分:3)

您需要为单选按钮元素指定一个自定义装饰器序列,如下所示:

$this->addElement('radio', 'zipZangZowie', array(
    'decorators' => array(
        'ViewHelper',
        array(array('AddTheLi' => 'HtmlTag'), array('tag' => 'li')),
        array(array('AddTheUl' => 'HtmlTag'), array('tag' => 'ul')),
        'Errors',
        array('Description', array('tag' => 'p', 'class' => 'description')),

        // specifying the "div" tag to wrap your <label> elements is not strictly 
        // necessary, but it produces valid XHTML if your form elements are wrapped
        //  in block-level tags like "<li>" (see next comment)
        array('Label', array('tag' => 'div')),

        // uncomment the following if all of your form elements are wrapped in "<li>"
        //array('HtmlTag', array('tag' => 'li')),
    ),
    'disableLoadDefaultDecorators' => true,
    'label' => 'Zip Zang Zowie',
    'separator' => '</li><li>',
    'attribs' => array(
        'options' => array(
            'foo' => 'Option 1', 
            'bar' => 'Option 2', 
            'baz' => 'Option 3'
        ),
    ),
));

我希望装饰Zend表格并不复杂。无论如何,上面的装饰器数组基于Zend的默认装饰器。您可能需要根据自己的喜好自定义它们。使单个单选按钮包含在列表中的关键部分是separator属性,它告诉ZF在每个单选按钮段之间放置什么,以及用于包装此块的两个额外HtmlTag包装器外部<ul><li>...</li></ul>代码。