Посмотрите мой ответ на этот поток в списке рассылки и моем сообщении в блоге об этом. Это - в основном тот же процесс, который описал Aaron.
Можно также пойти декоратором путь, с помощью свойства описания для содержания ссылки (не протестированный):
<?php
$foo = new Zend_Form_Element_Text('name');
$foo->setLabel('Name')
->setDescription('<a href="#">Link</a>')
->setDecorators(array(
'ViewHelper',
array('Description', array('escape' => false, 'tag' => false)),
array('HtmlTag', array('tag' => 'dd')),
array('Label', array('tag' => 'dt')),
'Errors',
));
$form->addElement($foo);
Я не уверен если 'tag'=>false
в Description
декоратор работал бы, но это стоит того, чтобы попытаться. Извините я не могу протестировать это теперь, мое поле разработки повреждается в данный момент. Если это перестало работать, попробуйте ручной метод рендеринга декоратора, описанный в тех двух ссылках.
Я думаю, что Вы ищете полный контроль над декоратором с помощью Сценария Представления:
В основном Вы хотите установить viewScript свойство элемента к пути к Вашему сценарию и затем передать любую дополнительную информацию, которую Вы хотели бы отправить, возможно, linkHref или заголовок ссылки, которую Вы создаете.
$name = new Zend_Form_Element_Text( 'name' );
$name->setLabel( 'Name' );
$name->viewScript = 'path/to/viewScript.phtml';
$name->decorators = array('ViewScript', array('linkHref' => '#',
'linkTitle' => 'My Link');
$this->addElements( $name );
$this->addDisplayGroup( array( 'name' ), 'people');
Затем Ваш viewScript был бы похож на это, я не уверен, как все Помощники в экземпляре Zend_Form_Element, но отчасти как это:
<dt><?= $this->formLabel($this->element->getName(),
$this->element->getLabel()) ?></dt>
<dd><?= $this->{$this->element->helper}(
$this->element->getName(),
$this->element->getValue(),
$this->element->getAttribs()
) ?>
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a>
<?= $this->formErrors($this->element->getMessages()) ?>
</dd>
Иногда, делая его в viewScript он лучше, потому что это дает Вам 100%-й контроль элемента, все еще будучи симпатичным DRY.
Просто чтобы добавить некоторую поддержку в пост Аарона, после нескольких часов головы, чтобы сделать что-то действительно простое (это, кажется, отрицает точку имения структуры), если вы обнаружите, что это не Работайте над своими флажками, то это потому, что вы должны использовать это в своем .phtml (на основе примера Aaron):
<dt><?= $this->formLabel($this->element->getName(),
$this->element->getLabel()) ?></dt>
<dd><?= $this->{$this->element->helper}(
$this->element->getName(),
$this->element->getValue(),
$this->element->getAttribs(),
$this->element->options
) ?>
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a>
<?= $this->formErrors($this->element->getMessages()) ?>
</dd>
Параметры! ОПЦИИ! ОПЦИИ! Где ты был когда мне нужно было найти тебя?! Так что не забудьте добавить следующее в свой помощник, если вы используете флажки:
$this->element->options
Это хорошо работает для добавления условий флажка Zend_Form_Element_Checkbox (это для SEO) (это для SEO) (это для SEO) (это для SEO) (это для SEO)