如何单独装饰文本元素标签和输入?

时间:2012-08-02 08:18:39

标签: zend-framework zend-form decorator

我有一个以这种方式声明的文本元素:

$name = $this->createElement('text', 'name');
$name->setLabel('imie:');

我想装饰这个元素,让它像这样呈现:

<div class="row">
  <span class="label">
    <label for="name" class="highlight">Name</label>
  </span>
  <span class="formw">
    <input type="text"  id="someid" name="name" class="textfield">
  </span>
</div>

我无法让它正常工作。 有人可以帮我设置装饰器吗?

1 个答案:

答案 0 :(得分:0)

使用viewScript装饰器:

partial @`views / scripts / _partial.phtml(将其命名为你想要的)

<form action="<?php echo $this->element->getAction() ?>"
      method="<?php echo $this->element->getMethod() ?>">
    <div class="row">
        <span class="label">
            <?php echo $this->element->name->renderLabel() //render the label for element ?>
        </span>
        <span class="formw">
            <?php echo $this->element->name->renderViewHelper() //render just the input of the element ?>
        </span>
        <?php echo $this->element->submit //render the whole submit element ?>
    </div>
</form>

在表单中设置装饰器:

class Application_Form_NewForm extends Zend_Form
{
    public function init() {
        $this->setMethod('POST');
        //set the viewscript decorator
        $this->setDecorators(array(
            array('ViewScript', array(
                    'viewScript' => '_partial.phtml'
            ))
        ));
    //more follows...

现在只需像往常一样渲染表单

您可能必须使用元素装饰器来完全符合您的要求,但这应该让您接近目标。

希望这会有所帮助......