我想创建一个多级组合框,如下例所示:
<select style="white-space: pre;">
<option value="0">1 - categoria 0</option>
<option value="1"> 1.1 - categoria 1</option>
<option value="2"> 1.1.1 - categoria 2</option>
<option value="3"> 1.1.1.1 - categoria 3</option>
<option value="4"> 1.1.1.1.1 - categoria 4</option>
<option value="5"> 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(" ",$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="&nbsp;final" value="23">&nbsp;final</option>
<option label="&nbsp;&nbsp;final2" value="24">&nbsp;&nbsp;final2</option>
</select>
结果是:
teste
test3
test4
final
final2
然后,空格没有显示......
有人可以帮助我吗?!
我忘了说,我的ZF表格有这个css:
选择{ 白空间:pre; }
答案 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);