удалить метку декоратора по умолчанию из Zend_Form_Element_Radio - PullRequest
0 голосов
/ 28 июня 2011

в моей форме после создания радиокнопки есть радиокнопка с надписью

<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 Ответ

1 голос
/ 28 июня 2011

Прежде всего, ваш набор декораторов не генерирует предоставленный вами 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 label, который отвечает за активацию input при нажатии на label.

Третий способ - использовать собственный декоратор, который добавляет только текст (вы можете использовать Label decorator для базы и заменить 355. $label = $view->formLabel($element->getFullyQualifiedName(), trim($label), $options); своим кодом)

В качестве примечания: Вам также не нужно $type->removeDecorator('Errors');, потому чтокогда вы используете setDecorators позже, он сначала удалит все декораторы (включая Errors), затем добавит новые, которые вы перечислили, и если вы пропустите 'Errors', он не будет добавлен.

...