2011-10-05 31 views
6

Tôi đang cố thêm một lớp (giống nhau) vào từng nhãn trong một nhóm nút radio.Zend_form_element_radio không thể thêm lớp vào nhãn

Đây là mã của tôi:

$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'); 

Và đây là kết quả của tôi:

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

Đây là đầu ra mong muốn của tôi:

<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"> 

Điều ngu ngốc là nó hoạt động cho tất cả các yếu tố hình thức khác của tôi cho đến nay. Tôi đã thử một triệu kết hợp và tìm kiếm ass của tôi, nhưng không có vấn đề gì tôi cố gắng tôi không thể thêm lớp vào nhãn.

Ý tưởng, giải pháp, đề xuất đều được hoan nghênh! Cảm ơn trước!

+0

Bạn có thể cung cấp cho chúng tôi mã của các thành phần mà nó hoạt động không? Tôi sẽ cố gắng để xem xét những gì khác nhau giữa những người, hoặc những gì khác nhau trong các hình thức của các yếu tố đang làm việc (nếu nó không giống nhau). – jhuet

Trả lời

17

Tôi đã mất hai giờ để tìm ra câu trả lời và nó infuriatingly đơn giản! Thêm dòng này vào tuyên bố của bạn: -

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

Dòng Zend/View/Helper/FormRadio.php 79 - 95 đã cho tôi manh mối.

$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]); 
     } 
    } 

Điều này làm việc trên hệ thống của tôi, tôi hy vọng điều đó cũng phù hợp với bạn.

+0

Wow! Rất đơn giản! Cảm ơn rất nhiều! Đó là một bummer rằng ZF thực sự thiếu rất nhiều trong tài liệu tại một số điểm. –

+1

Vâng, tài liệu tốt nhất là mã. Nó được viết tốt, vì vậy bạn thường có thể làm việc ra cuối cùng. Cảm ơn câu hỏi thú vị. – vascowhite

0

thử điều này:

$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(''); 

HOẶC

// 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

Không hoạt động. Tôi đã thử áp dụng các trang trí ở các vị trí khác nhau. –

+0

nếu bạn xóa công việc trang trí? – JellyBelly

+0

Ý của bạn là gì? Xóa tất cả các trang trí khác? Điều đó cũng không hiệu quả. Tôi cũng đã thử thêm tất cả các trang trí có thể. –

Các vấn đề liên quan