2012-11-10 33 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' 
     ) 
    ) 
); 
相關問題