2011-10-05 13 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

それは答えを見つけるために私に2時間かかったし、それがinfuriatingly簡単です!あなたの宣言に次の行を追加します -

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

どういう意味ですか?他のすべてのデコレータを削除しますか?それはどちらもうまくいかなかった。すべての可能なデコレータを追加しようとしました。 –

関連する問題