【问题标题】:Zend Form add span to labelZend Form 将 span 添加到标签
【发布时间】:2013-09-25 23:38:48
【问题描述】:

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

有什么想法会害死我!?

J

编辑:

我不确定这是否会影响它,但它基本上是从一个数组中创建许多复选框,所以它在一个 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'))
        ));
    }

【问题讨论】:

    标签: zend-framework zend-form


    【解决方案1】:

    我可以想出两个尝试:

    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 漏洞。

    【讨论】:

    • 感谢您的回答我需要将跨度包装在标签输出周围,以便它是 label output
    • 上面的代码会给你&lt;label&gt;&lt;span&gt;Some Text&lt;/span&gt;&lt;/label&gt;。这不是你想要的吗?如果不是,恐怕我误解了您的问题 - 在这种情况下,最好的办法是您发布一个示例,整个表单在 HTML 中的外观。
    • 很抱歉给您带来了困惑。我正在输出表格 $this->formSoftware();所以当它输出时我需要。
    • 但是您可以将自定义装饰器解决方案与return sprintf('&lt;label&gt;%s&lt;span&gt;Some Text&lt;/span&gt;&lt;/label&gt;', $content);一起使用
    • 谢谢 我如何使用自定义装饰器以及将代码放在哪里?以 php?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多