2012-04-09 35 views
1

我想建立一个多层次的组合框,如下例所示:ZF 1.11表不显示我的空格

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

    选择{ 白色空间:前; }

回答

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

完美!=) 我用'$ parent-> addMultiOption($ row ['category'],html_entity_decode($ itemLevel,ENT_COMPAT,'UTF-8')。$ row ['name']);'insted原始'$ parent-> addMultiOption($ row ['category'],$ itemLevel。$ row ['name']);'和它的工作原理! Tnks为您的伟大答案! ^^ – vinigarcia87 2012-04-09 18:48:09

+0

很高兴帮助你;) – Liyali 2012-04-09 19:27:23

0

默认情况下ZF从Zend_Form的逃逸输入,您可以通过添加防止这种情况下您的Zend_Form_Element:

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

我不喜欢这样的: '$父 - > setLabel($翻译 - > _(' 父 ')) ** - > setAttrib(通过' 逃离”,假)** \t - > setDecorators($这个 - > elementDecorators2) \t - > setRequired?(假) \t - > addFilter( 'StripTags') - >的setValue(isset($选项[$父 - >的getName()])$选择[$父 - > getName()]:'');' bu没有工作! =( – vinigarcia87 2012-04-09 17:41:41