Удалить класс декоратора меток во время выполнения в Zend Framework
Я работаю над одним проектом в Zend Framework 1.12. для генерации декораторов я создал один класс Application_Form_Base, который расширяет Zend_Form. Я написал код в этом классе таким образом, когда я добавляю новый элемент с декоратором меток в моей форме, он применяет один класс CSS 'field_label' к этой метке. Проблема в том, что для какой-то формы я просто хочу удалить этот класс css метки во время выполнения. У кого-нибудь есть идея, как я могу удалить этот класс CSS во время выполнения при отрисовке элементов формы?
Следующее - мой промежуточный класс
<?php
class Application_Form_Base extends Zend_Form
{
public $elementDecorators = array(
'ViewHelper',
'Errors',
array(
'label',
array(
'class' => 'field_label'
)
),
array(
array(
'row' => 'HtmlTag'
),
array(
'tag' => 'div',
'class' => 'form-row'
)
)
);
public $buttonDecorators = array(
'ViewHelper',
array(
array(
'label' => 'HtmlTag'
),
array(
'tag' => 'label',
'placement' => 'prepend',
'class'=>'field_label'
)
),
array(
array(
'row' => 'HtmlTag'
),
array(
'tag' => 'div',
'class' => 'form-row'
)
)
);
public function loadDefaultDecorators ()
{
$this->setDecorators(
array(
'FormElements',
array(
'HtmlTag',
array(
'tag' => 'div',
'class' => 'zendForm'
)
),
'Form'
));
}
}
Ниже приведен фрагмент моей формы поиска
class Admin_Form_SubscribeSearch extends Application_Form_Base
{
public function init()
{
$locale = Zend_Registry::get('Zend_Translate');
/* Form Elements & Other Definitions Here ... */
$this->setMethod('post');
$this->setName('searchPackage');
$this->addElement('text','name',array(
'label'=>$locale->translate('label_name'),
'required'=>true,
'decorators'=> $this->elementDecorators,
'filters'=>array('StringTrim'),
'class'=>'',
));
ниже приведен HTML-вывод, сгенерированный для этого поля формы.
<label class="field_label required" for="price">name</label>
Я хочу удалить этот класс 'field_label' при отрисовке элементов формы в представлении. как я могу этого достичь?
1 ответ
Вы можете установить конкретный декоратор для конкретного элемента:
$element = $this->getElement('name');
$element->setDecorator(array('Label')); // without additional class