Zend_form_element_radio не может добавить класс к метке - PullRequest
6 голосов
/ 05 октября 2011

Я пытаюсь добавить класс (одинаковый) к каждой метке в группе переключателей.

Это мой код:

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

Глупо то, что до сих пор это работает для всех моих других элементов формы. Я пробовал миллион комбинаций и искал свою задницу, но, что бы я ни пытался, я не могу добавить класс на ярлык.

Идеи, решения, предложения приветствуются! Заранее спасибо!

Ответы [ 2 ]

18 голосов
/ 06 октября 2011

Мне потребовалось два часа, чтобы найти ответ, и это невероятно просто! Добавьте эту строку в ваше объявление: -

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

Zend / View / Helper / 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 голосов
/ 05 октября 2011

попробуйте это:

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