В Zend Framework как вы оборачиваете элементы формы в метку, используя декораторы? - PullRequest
2 голосов
/ 11 июня 2009

Я бы хотел обернуть элементы формы ярлыками как таковыми

<label for="email">E-mail <input type="text" name="email" id="email" /></label>

Единственный вариант, который я смог найти, - это изменить расположение; однако он принимает только «prepend» и «append»:

<!-- prepend -->
<label for="email">E-mail</label> <input type="text" name="email" id="email" />
<!-- append -->
<input type="text" name="email" id="email" /> <label for="email">E-mail</label>

Это не то, что я преследую. Я мог бы изменить класс Zend_Form_Decorator_Label, но это последний вариант.

Ответы [ 4 ]

5 голосов
/ 11 июня 2009

К сожалению, это не представляется возможным, вам, вероятно, придется написать собственный декоратор. Все должно быть довольно просто.

Обратите внимание, что я просто напишу это здесь, это не проверено, но основано на другом декораторе, поэтому должно работать без особых изменений

class Your_Form_Decorator_Date extends Zend_Form_Decorator_Abstract {
    public function render($content) {
       $element = $this->getElement();

       $name = $element->getFullyQualifiedName();
       return '<label for="'.$name.'">'. $element->getLabel() . ' '.$content.'</label>';

    }
}

Теперь, если вы добавите правильный префикс к вашей форме.

$this->addPrefixPath('Your_Form', 'Your/Form/');

Вы должны быть в состоянии использовать это, чтобы обернуть свой ввод (декоратор FormElement) в тег метки.

Извините, у меня не было возможности проверить это, но учитывая, как работают мои другие декораторы. Это должно быть хорошо.

РЕДАКТИРОВАТЬ: Спасибо за указание, что текст метки не был обработан gnarf. Теперь это исправлено.

0 голосов
/ 10 июля 2009

Я предполагаю, что вы хотите, чтобы метка располагалась рядом с элементом.

Пример

$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email: ');
$form = new Zend_Form();
$form->addElement($email);

Теперь, это сделает форму как таковую

<label>Email:</label>
      <input type="text"/>

Чтобы текстовое поле находилось рядом с меткой, необходимо отдельно визуализировать декоратор метки Для этого:

Я создал форму в своем контроллере, назначил ее переменной в представлении:

//in controller
$this->view->form = $form;

//in view script
$form = $this->form;

//('tag', null) tells the renderer not to wrap the label in the usual <dt> tag,  
//but not to use anything at all
$form->getElement('email')->getDecorator('label')->setOption('tag', null);

а затем, по вашему мнению, скрипт ...

<?php print($form->email) ?>

При этом элемент Text будет отображаться рядом с его собственной меткой

0 голосов
/ 14 июня 2009

Полагаю, вам не следует использовать это;) Это потому, что содержимое метки является описанием поля. Бессмысленно включать этот элемент в описание. Если вам нужно, вы можете заключить оба в div или что-то в этом роде.

Единственная причина этого - плохо написанные CSS:)

0 голосов
/ 11 июня 2009

Я всегда считал, что декораторы чрезмерно спроектированы для любой конкретной ситуации, и это в некотором роде противоречит цели отделения уровня представления от бизнес-логики. Вы можете использовать частичный помощник Zend или создать свои собственные виджеты, используя Zend_Form или их комбинацию, что даст вам гораздо больший контроль над презентацией.

На некоторых ссылочных сайтах XHTML они не перечисляют входные элементы как допустимые дочерние элементы для меток, хотя текст и любой встроенный элемент должны быть действительными. Это может быть еще одной причиной, по которой это запрещено.

...