#zend-framework #zend-form #zend-decorators
#zend-framework #zend-form #zend-декораторы
Вопрос:
Я хотел бы отобразить следующую разметку:
<div class="row">
<p>
<label>Your Name</label>
<input type="text" class="text_field" name="name">
<ul class="errors">
<li>Waarde is vereist en kan niet leeg worden gelaten</li>
</ul>
</p>
</div>
Это мой элемент формы Zend декоратор:
$this->addElement('text', 'name', array(
'label' => 'Naam:',
'class' => 'text_field',
'required' => true,
'decorators' => array(
'ViewHelper',
'Label',
'Errors',
array(array('row' => 'HtmlTag'), array('tag' => 'p')),
array(array('content' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row'))
)));
Но это всегда отображает список ul под тегом p и никогда внутри. Он также добавляет дополнительный тег p под списком.
<div class="row">
<p>
<label class="required" for="name">Naam:</label>
<input type="text" class="text_field" value="" id="name" name="name">
</p>
<ul class="errors">
<li>Waarde is vereist en kan niet leeg worden gelaten</li>
</ul>
<p></p>
</div>
Что я делаю не так?
Ответ №1:
Нашел это! Моя глупая ошибка. Я проверил только окончательный вывод в моем браузере. Я использую шаблон, который также загружает javascript, и это изменяет DOM, что создает нежелательный результат.
Итак, первая настройка декоратора работала правильно.
Ответ №2:
Попробуйте выполнить следующее:
$this->addElement('text', 'name', array(
'label' => 'Naam:',
'class' => 'text_field',
'required' => true,
'decorators' => array(
'ViewHelper',
'Label',
'Errors',
array(array('content' => 'HtmlTag'), array('tag' => 'p')),
array(array('content' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row'))
)));
Комментарии:
1. Это не сработает, поскольку оба декоратора HtmlTag имеют одинаковый псевдоним «content», и поэтому будет использоваться последний определенный.