2012-11-10 29 views
4

我在将复选框包装到标签中时遇到了Zend装饰器(ZF1)的一些问题。 在我的表单中我有类似的东西很简单:使用ZF装饰器将复选框包装在标签中

$remember = new Zend_Form_Element_Checkbox('remember'); 
$remember 
    ->setLabel('Remember me'); 

在我的装饰类:

$checkboxDecorator = array(
    'ViewHelper', 
    'Errors', 
    'Label', 
    array('HtmlTag', array('tag' => 'div', 'class' => 'controls')), 
    array('decorator' => array('Holder' => 'HtmlTag'), 'options' => array('tag' => 'div', 'class' => 'control-group')), 

); 

$this->setDefaultElementsDecorators($this->_checkboxElement, $checkboxDecorator); 

获得的源代码如下:

<div class="control-group"> 
    <div class="controls"> 
     <label for="remember" class="optional">Remember me</label> 
     <input type="hidden" name="remember" value="0"> 
     <input type="checkbox" name="remember" id="remember" value="1"> 
    </div> 
</div> 

而我想要的是:

<div class="control-group"> 
    <div class="controls"> 
    <label for="remember" class="optional"> 
     <input type="hidden" name="remember" value="0"> 
     <input type="checkbox" name="remember" id="remember" value="1"> 
     Remember me 
     </label> 
    </div> 
</div> 

我测试过的都失败了所有解决方法,请帮我:P

回答

0

最简单的方法是创建一个新的自定义装饰...

class App_Form_Decorator_MyLabel 
    extends Zend_Form_Decorator_Abstract 
{ 
    public function render($content) 
    { 
     $el = $this->getElement(); 
     $id = htmlentities($el->getId()); 
     $label = htmlentities($el->getLabel()); 

     return '<label for="' . $id . '">' . $content . ' ' . $label . '</label>'; 
    } 
} 

那么你的$checkboxDecorator变为:

$checkboxDecorator = array(
    'ViewHelper', 
    'MyLabel', // Your new class 
    'Errors', 
    array('HtmlTag', array('tag' => 'div', 'class' => 'controls')), 
    array(
     'decorator' => array('Holder' => 'HtmlTag'), 
     'options' => array(
      'tag' => 'div', 
      'class' => 'control-group' 
     ) 
    ) 
); 
相关问题