2011-10-05 67 views
6

我試圖向一組單選按鈕中的每個標籤添加一個類(相同)。Zend_form_element_radio無法將類添加到標籤

這是我的代碼:

$linkedin_share = new Zend_Form_Element_Radio('linkedin_share', array('escape' => false)); 
    $linkedin_share->setDecorators(array('ViewHelper','Errors', array('Label', array('class' => 'TEST')))) 
       ->addMultiOption('none', $this->getView()->translate('None')) 
       ->addMultiOption('icon', '<img src="'.$this->getView()->baseUrl().'/images/admin/icons/social_media_share/linkedin.png'.'"/>') 
       ->addMultiOption('counter', '<img src="'.$this->getView()->baseUrl().'/images/admin/icons/social_media_share/linkedin_share.jpg'.'"/>') 
       ->setSeparator('') 
       ->setAttrib('class', 'item_small_checkbox'); 

這是我的輸出:

<label for="linkedin_share-none"> 
<label for="linkedin_share-icon"> 
<label for="linkedin_share-counter"> 

這是我想要的輸出:

<label for="linkedin_share-none" class="share_label_class"> 
<label for="linkedin_share-icon" class="share_label_class"> 
<label for="linkedin_share-counter" class="share_label_class"> 

愚蠢的事情是,它適用於迄今爲止我所有的其他表單元素。我嘗試了一百萬個組合並搜索了我的屁股,但無論我嘗試什麼,我都無法將類添加到標籤中。

想法,解決方案,建議都非常歡迎!提前致謝!

+0

你能告訴我們它的工作原理的代碼嗎?我會試着去看看這兩者之間有什麼不同,或者什麼是不同的工作元素(如果不相同)。 – jhuet

回答

17

我花了兩個小時才找到答案,這是僵硬的簡單!該行添加到你的宣言: -

->setAttrib('label_class', 'share_label_class') 

的Zend /搜索/助手/ FormRadio.php線79 - 95給我的線索。

$label_attribs = array(); 
    foreach ($attribs as $key => $val) { 
     $tmp = false; 
     $keyLen = strlen($key); 
     if ((6 < $keyLen) && (substr($key, 0, 6) == 'label_')) { 
      $tmp = substr($key, 6); 
     } elseif ((5 < $keyLen) && (substr($key, 0, 5) == 'label')) { 
      $tmp = substr($key, 5); 
     } 

     if ($tmp) { 
      // make sure first char is lowercase 
      $tmp[0] = strtolower($tmp[0]); 
      $label_attribs[$tmp] = $val; 
      unset($attribs[$key]); 
     } 
    } 

這適用於我的系統,我希望它也適合您。

+0

哇!非常簡單!非常感謝! ZF在某些方面確實缺乏文檔記錄,這是一件令人失望的事情。 –

+1

是的,最好的文檔是代碼。它寫得很好,所以你通常可以最終解決問題。感謝有趣的問題。 – vascowhite

0

試試這個:

$linkedin_share = new Zend_Form_Element_Radio('linkedin_share', array('escape' => false)); 
$linkedin_share->setAttrib('class', 'item_small_checkbox'); 
    $linkedin_share->setDecorators(array('ViewHelper','Errors', array('Label', array('class' => 'TEST')))) 
       ->addMultiOption('none', $this->getView()->translate('None')) 
       ->addMultiOption('icon', '<img src="'.$this->getView()->baseUrl().'/images/admin/icons/social_media_share/linkedin.png'.'"/>') 
       ->addMultiOption('counter', '<img src="'.$this->getView()->baseUrl().'/images/admin/icons/social_media_share/linkedin_share.jpg'.'"/>') 
       ->setSeparator(''); 

OR

// linkedin_share

$this->addElement(
    'radio', 
    'linkedin_share', 
    array(
     'label' => 'Linkedin Share', 
     'separator' => ' ', 
     'class' => 'item_small_checkbox', 
    ) 
); 
$this->linkedin_share->addMultiOption('none', $this->getView()->translate('None')) 
     ->addMultiOption('icon', '<img src="' . $this->getView()->baseUrl() . '/images/admin/icons/social_media_share/linkedin.png' . '"/>') 
     ->addMultiOption('counter', '<img src="' . $this->getView()->baseUrl() . '/images/admin/icons/social_media_share/linkedin_share.jpg' . '"/>'); 
+0

不起作用。我已經嘗試在不同的位置應用裝飾器。 –

+0

如果你刪除裝飾工作? – JellyBelly

+0

你是什麼意思?刪除所有其他裝飾器?那也行不通。我也嘗試添加所有可能的裝飾器。 –