1

Zend 今天下午让我发疯,我需要在标签内添加一个:

<label><span>Some Text</span></label>

这是我的表单装饰器,但它根本不适合我,它把第一个标签放在前面:

 $checkbox->setDecorators(array(
            'ViewHelper',
            array(array('data' => 'HtmlTag'),
            array('tag' => 'div', 'class' => 'myspans')),
            array('Label', array('tag' => 'span', 'class' => 'sdfdsf'))
        ));

有什么想法会杀了我!?

Ĵ

编辑:

我不确定这是否会影响它,但它基本上从一个数组中创建了很多复选框,所以它在一个 foreach 循环中:

        foreach($software as $prev => $p)
    {
        //$checkbox->setLabel($p);
        $checkbox->addMultiOption($prev,$p);
        $checkbox->setAttrib('id', 'checkbox');
        $checkbox->setSeparator('  ');
            $checkbox->setDecorators(array(
            'ViewHelper',
            array(array('data' => 'HtmlTag'),
            array('tag' => 'div', 'class' => 'myspans')),
            array('Label', array('tag' => 'span', 'class' => 'sdfdsf'))
        ));
    }
4

1 回答 1

0

我可以想出两个尝试:

1.编写自定义装饰器:

class MyLabel extends Zend_Form_Decorator_Abstract {
        public function render($content) {
                return sprintf(
                    '<label><span>Some Text</span></label>%s',
                    $content
                ) ;
        }
}

然后简单地将其添加到装饰器列表中:

$checkbox->addDecorator(new MyLabel());

2.禁用转义

您还可以禁用转义并直接将 html 标签放在标签中:

$checkbox->setLabel('<span>Some Text</span>');
$checkbox->setDecorators(array(
        'ViewHelper',
        array(array('data' => 'HtmlTag'),
        array('tag' => 'div', 'class' => 'myspans')),
        array('Label', array('escape' => false, 'tag' => 'span', 'class' => 'sdfdsf'))
    ));

显然,这种方法只能谨慎使用,因为它可能导致 XSS 漏洞。

于 2013-09-20T16:36:18.013 回答