2012-04-09 14 views
1

ich eine Multi-Level-Combobox erstellen möchten, wie das folgende Beispiel:ZF 1,11 Formular zeigen nicht meine Whitespaces

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

Das Ergebnis sollte:

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 

Ich bin die Schaffung meine ZF 1.11 Form wie folgt aus:

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

     /* ... */ 
    } 
} 

Aber aus irgendeinem Grund die Combobox wie dies erstellen:

012.351.
<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> 

Und das Ergebnis ist:

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

Dann werden die Whitespaces nicht gezeigt ...

Jemand kann mir helfen ?!

  • ich vergaß zu sagen, meine ZF Form haben diese CSS:

    wählen Sie { white-space: pre; }

Antwort

2

$this->setAttrib('escape', false); nicht mit Zend_Form_Element_Select funktioniert.

Derzeit gibt es keine Möglichkeit, dies mit einer nativen Methode zu tun, da a bug already reported here (ZF-9388) enthält.

Die einzige Lösung ist, das Formular zu überschreibenWählen Sie View Helper und lassen Sie es so, wie Sie wollen. Zum Beispiel würde man so etwas schreiben müssen:

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

statt dessen:

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

im _build() Verfahren.

+1

Perfekt! =) Ich habe '$ parent-> addMultiOption ($ row ['category'], html_entity_decode ($ itemLevel, ENT_COMPAT, 'UTF-8'). $ Row ['name']);' insted der ursprünglichen '$ parent-> addMultiOption ($ row [' category '], $ itemLevel. $ row [' name ']); 'und es funktioniert! Tnks für Ihre großartige Antwort! ^^ – vinigarcia87

+0

Froh, dass es dir geholfen hat;) – Liyali

0

standardmäßig ZF entkommt Eingabe von Zend_Form, können Sie diese zu Ihrem Zend_Form_Element, indem Sie folgende verhindern:

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

ich so tat: '$ Eltern-> setLabel ($ translate -> _ (' Eltern ')) ** -> setAttrib (' escape‘, false) ** \t -> setDecorators ($ this-> elementDecorators2) \t -> setRequired? (false) \t -> addFilter ('Striptags') -> setValue (isset ($ options [$ Eltern-> getName()]) $ options [$ Eltern-> getName()]: ''); ' Bu hat nicht funktioniert! = ( – vinigarcia87