Zend Form оформители неприятностей - PullRequest
4 голосов
/ 25 января 2010

Как мне добиться следующего с помощью декораторов форм для элементов формы:

<dt>
  <ul>
    <li>The errors</li>
    <li>The errors</li>
  </ul>
  <label>The label</label>
</dt>
<dd>
  <input type="text" value="The input field">
</dd>

Другими словами, вместо ошибок, добавленных после поля ввода, я хочу, чтобы они были добавлены перед меткой. Я делаю однако хочу сохранить теги <dt> и <dd>, как показано выше.

Ответы [ 2 ]

5 голосов
/ 26 января 2010

Хорошо, я узнал, как это сделать. Постепенно декораторы начинают обретать смысл для меня:

$decorators = array(
 'Label',
 array( 'Errors', array( 'placement' => 'prepend' ) ),
 array( array( 'dt' => 'HtmlTag' ), array( 'tag' => 'dt' ) ),
 array( array( 'ddOpen' => 'HtmlTag' ), array( 'tag' => 'dd', 'openOnly' => true, 'placement' => 'append' ) ),
 array( 'ViewHelper' ),
 array( array( 'ddClose' => 'HtmlTag' ), array( 'tag' => 'dd', 'closeOnly' => true, 'placement' => 'append' ) )
);

Что делает следующее:

  1. Первый рендеринг метки
  2. Затем добавьте (по умолчанию = добавьте) ошибки
  3. Обернуть (по умолчанию) все предыдущее содержимое в HtmlTag (dt)
  4. Затем добавьте (по умолчанию = перенос) открывающий тег HtmlTag (dd)
  5. Затем добавьте (по умолчанию) ViewHelper
  6. Затем добавьте (по умолчанию = wrap) закрывающий тег HtmlTag (dd)

Затем установите декораторы:

// be sure to only set them, after you have added the relevant elements to the form
$this->setElementDecorators( $decorators );

PS:
Имейте в виду, что мой конкретный пример создает недействительный HTML. ;-) Я только позже узнал, что <ul> элементы не допускаются в <dt> элементах с DOCTYPE HTML 4.01 strict

0 голосов
/ 25 января 2010

В вашем классе формы попробуйте это:

$this->setElementDecorators(array(
    'Errors',
    'ViewHelper',
    'Label',
));
...