我在按照我想要的方式塑造表单布局时遇到了一些麻烦。这里的问题不是解析文件元素本身,问题来自函数:$file->setMultiFile(3)
。我似乎无法在多个文件输入元素之间放置一个分隔符,导致它们放在一行后面。
这是我创建文件元素的方式:
$oElement = new Zend_Form_Element_File('file');
$oElement->setLabel('File')
->setMultiFile(3)
->setDestination('location on server');
$this->addElement($oElement);
然后我添加装饰器:
$this->getElement('file')->setDecorators(array(
'File',
'Errors',
array(array('td' => 'HtmlTag'), array('tag' => 'td')),
array('Label', array('tag' => 'td')),
array(array('tr' => 'HtmlTag'), array('tag' => 'tr'))
));
目前的输出是:
<tr>
<td id="file-label">
<label class="optional" for="file">File</label>
</td>
<td>
<input type="file" id="file-0" name="file[]">
<input type="file" id="file-1" name="file[]">
<input type="file" id="file-2" name="file[]">
</td>
</tr>
我想要的是在输入元素之间有一个<br />
,因此它们不会放在一行上。这可以通过装饰者吗?使用radio / mutliselect / multicheckbox有一个setSeparator
函数可以执行此操作,但文件元素的情况似乎并非如此。
有人可以帮帮我吗? 提前谢谢,
伊利安
答案 0 :(得分:2)
这可能有点作弊,但以下内容适合您:
$fd = $oElement->getDecorator('File');
$fd->setOption('placement', 'PREPEND')
->setOption('separator', '<br />');
您可以在将元素附加到表单并更改装饰器之后放置该代码。
Zend_Form_Decorator_File
的render()方法在创建标记时使用分隔符,但它们无法设置它。放置和分隔符的设置被列入黑名单,但使用上述技巧,您仍可以设置它们。
在Zend_Form_Decorator_File中渲染():
$separator = $this->getSeparator();
$placement = $this->getPlacement();
//...
// in a loop, create the array of input elements
$markup[] = $view->formFile($name, $htmlAttribs);
//...
// join each file element by separator, which cannot be set with setSeparator()
$markup = implode($separator, $markup);
我必须将展示位置设置为PREPEND,否则在使用APPEND时会<br />*file input*<br />*file input*<br />*file input*
。
希望有所帮助。