从Zend_Form_Element_Radio中删除默认装饰器标签

时间:2011-06-28 07:02:36

标签: zend-framework zend-form php

在创建单选按钮后以我的zend形式有标签包装单选按钮

<label for="type-per"><input type="radio" class="radio" value="per" id="type-per" name="type">Percentage</label>

我遇到的问题是,当我点击包装标签时,按钮上没有选中按钮,所以我想删除包装标签,我不想删除表单中的所有标签。我只想删除单选按钮的包装标签。这是我的单选按钮代码,

    $type = new Zend_Form_Element_Radio('type');
    $type->setLabel('Type');
    $type->addMultiOption('per', 'Percentage');
    $type->addMultiOption('fix','Fixed');
    $type->setRequired(true);
    $type->removeDecorator('Errors');
    $type->addErrorMessage('You must select a type.');
    $type->class = 'radio';
    $type->setDecorators(
                         array(
                            array('ViewHelper',
                                        array('helper' => 'formRadio')
                            ),
                            array('Label',
                                        array('class' => 'label')
                            ),
                            array(
                                array('out'=>'HtmlTag'),
                                array('tag' => 'div', 'class' => 'formfield', 'id' => 'type_div')
                             ),
                             array(
                                array('prepend' => 'HtmlTag'),
                                array('tag' => 'div', 'class' => 'clear', 'placement' => 'prepend')
                             )                                                                                               
                         )                           
                      );

请帮助:(

1 个答案:

答案 0 :(得分:1)

首先,您的装饰器集不会生成您提供的HTML。然而

要完全删除标签,请从装饰器集中删除此行

array('Label', array('class' => 'label') ),

但它也将删除文本

您也可以尝试

array('Label', 
      array('class' => 'label',
           'placement'=>'APPEND',
           'tag'=>'span', //if you want to use other tag
           'disableFor'=>true) 
     ),

可能'disableFor'=>true是您所需要的,因为它会移除for的{​​{1}}属性,该label属性负责在点击{{1}时激活input }。

第三种方法是使用仅附加文本的自定义装饰器(您可以使用标签装饰器作为基础并将label替换为您的代码)

作为旁注:您也不需要355. $label = $view->formLabel($element->getFullyQualifiedName(), trim($label), $options);,因为当您稍后使用$type->removeDecorator('Errors');时,它会首先删除所有装饰器(包括setDecorators),然后添加您列出的新装饰器,如果省略Errors,则不会添加。