Вы можете создать свой собственный декоратор, чтобы сделать это, что-то простое, как это ::
class My_Decorator_ElementWrapper extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
$class = 'form-element';
$errors = $this->getElement()->getMessages();
if (!empty($errors))
$errors .= ' has-errors';
return '<div class="'.$class.'">' . $content . '</div>';
}
}
Теперь вы можете просто зарегистрировать этот декоратор для элемента:
$element->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
$element->addDecorator('ElementWrapper');
Вы можететакже зарегистрируйте путь префикса для всех элементов одновременно, используя вместо этого $form->addElementPrefixPath()
.
Если вы хотите автоматически добавить этот декоратор (и путь префикса) для всех элементов, я предлагаю вам расширить каждый элементСоответствующий Zend (например, make My_Form_Element_Text
, который расширяет Zend_Form_Element_Text
), а затем добавьте путь префикса в функцию init и переопределите метод loadDefaultDecorators()
, чтобы добавить ElementWrapper
в конце цепочки декоратора.Например, вот как loadDefaultDecorators()
выглядит Zend_Form_Element_Text
:
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled()) {
return $this;
}
$decorators = $this->getDecorators();
if (empty($decorators)) {
$this->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
->addDecorator('HtmlTag', array('tag' => 'dd',
'id' => $this->getName() . '-element'))
->addDecorator('Label', array('tag' => 'dt'));
}
return $this;
}
Вы бы просто добавили ->addDecorator('ElementWrapper')
в конце цепочки.Таким образом, чтобы показать конкретный пример My_Form_Element_Text
:
class My_Form_Element_Text extends Zend_Form_Element_Text
{
public function init()
{
$this->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator');
}
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled()) {
return $this;
}
$decorators = $this->getDecorators();
if (empty($decorators)) {
$this->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
->addDecorator('HtmlTag', array('tag' => 'dd',
'id' => $this->getName() . '-element'))
->addDecorator('Label', array('tag' => 'dt'))
->addDecorator('ElementWrapper');
}
return $this;
}
}