ZF 1.11表格不显示我的空白

时间:2012-04-09 15:03:51

标签: zend-framework zend-form

我想创建一个多级组合框,如下例所示:

<select style="white-space: pre;">
    <option value="0">1 - categoria 0</option>
    <option value="1">&nbsp;1.1 - categoria 1</option>
    <option value="2">&nbsp;&nbsp;1.1.1 - categoria 2</option>
    <option value="3">&nbsp;&nbsp;&nbsp;1.1.1.1 - categoria 3</option>
    <option value="4">&nbsp;&nbsp;&nbsp;&nbsp;1.1.1.1.1 - categoria 4</option>
    <option value="5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.1.1.1.1.1 - categoria 5</option>
</select>

结果应为:

1 - categoria 0
 1.1 - categoria 1
  1.1.1 - categoria 2
   1.1.1.1 - categoria 3
    1.1.1.1.1 - categoria 4
     1.1.1.1.1.1 - categoria 5

我正在创建我的ZF 1.11表单:

class Admin_Form_Category extends Zend_Form
{
    public $elementDecorators2 = array(
        'ViewHelper',
        'Errors',
        array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'elementSelect')),
        array('Label', array('tag' => 'td')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    );

    public function __construct($options = null)
    {
        //parent::__construct($options);

        $view = new Zend_View();
        $baseUrl = $view->baseUrl();

        // Translating the form
        $translate = Zend_Registry::get('translate');

        $this->setName('formcategory');
        $this->setAttrib('accept-charset', Zend_Registry::get('config')->resources->view->encoding);
        $this->setMethod('post');
        $this->setEnctype(Zend_Form::ENCTYPE_MULTIPART);

        /* HERE IS MY COMBOBOX */
        $parent = new Zend_Form_Element_Select('parent');
        $parent->addErrorMessage($translate->_('You must select an parent'));
        $parent->setLabel($translate->_('Parent'))
            ->setDecorators($this->elementDecorators2)
            ->setRequired(false)
            ->addFilter('StripTags')
                ->setValue( isset($options[ $parent->getName() ]) ? $options[ $parent->getName() ] : '');
        $model = new App_Models_Category();
        $data = $model->fetchAll();

        $parent->addMultiOption('','');
        foreach($data as $row){
                $itemLevel = str_repeat("&nbsp;",$row['level']);
            $parent->addMultiOption($row['category'],$itemLevel.$row['name']);
        }
        $this->addElement($parent);

        /* ... */
    }
}

但是,出于某种原因,组合框是这样创建的:

<select id="parent" name="parent">
    <option selected="selected" label="" value=""></option>
    <option label="teste" value="14">teste</option>
    <option label="test3" value="16">test3</option>
    <option label="test4" value="17">test4</option>
    <option label="&amp;nbsp;final" value="23">&amp;nbsp;final</option>
    <option label="&amp;nbsp;&amp;nbsp;final2" value="24">&amp;nbsp;&amp;nbsp;final2</option>
</select>

结果是:

teste
test3
test4
&nbsp;final
&nbsp;&nbsp;final2

然后,空格没有显示......

有人可以帮助我吗?!

  • 我忘了说,我的ZF表格有这个css:

    选择{     白空间:pre; }

2 个答案:

答案 0 :(得分:2)

$this->setAttrib('escape', false);不适用于Zend_Form_Element_Select。

目前,由于Zend_View_Helper_FormSelect包含a bug already reported here (ZF-9388),因此无法使用原生方法执行此操作。

唯一的解决方案是覆盖formSelect视图助手并使其按您希望的方式工作。例如,你需要写这样的东西:

$opt = '<option'
             . ' value="' . $value . '"'
             . ' label="' . $label . '"';

而不是:

$opt = '<option'
             . ' value="' . $this->view->escape($value) . '"'
             . ' label="' . $this->view->escape($label) . '"';

_build()方法中。

答案 1 :(得分:0)

默认情况下,ZF从Zend_Form中转义输入,您可以通过在Zend_Form_Element中添加以下内容来防止这种情况:

$this->setAttrib('escape', false);