我是Zend的初学者。我有一个小网站,我可以在其中为用户社区撰写文章。对于每篇文章,用户都可以附加一个或多个文件。我制作了一个表单,使管理员能够更新文章。
我可以显示文章附带的每个文件的输入文件列表。
现在我希望在输入文件控件的右侧显示一个指向该文件的链接。
我想我需要使用装饰器,但我很难弄清楚如何让它工作。
对此有任何帮助吗?
答案 0 :(得分:0)
Rob Allen撰写了一篇关于使用Zend_Form的精彩文章,并通过一个很好的装饰器示例。也许这会有所帮助。
答案 1 :(得分:0)
以下是将View Helper与ViewHelper Decorator结合使用以将链接附加到File元素的简单方法。
首先,如果您还没有设置帮助路径,请将其添加到application.ini
:
resources.view.helperPath.My_View_Helper = "My/View/Helper/"
然后在您的路径中(library
文件夹工作正常),创建目录树My/View/Helper
。
在上面的目录中创建View Helper,我称之为Link
的示例,因此创建My/View/Helper/Link.php
Link.php的内容是:
<?php
class My_View_Helper_Link extends Zend_View_Helper_Abstract
{
public function link($name, $value, $attribs, $elOptions)
{
if (!isset($attribs['linkOpts']) || !is_array($attribs['linkOpts']))
return '';
$linkOpts = $attribs['linkOpts'];
$link = (isset($linkOpts['href'])) ? $linkOpts['href'] : '';
$text = (isset($linkOpts['text'])) ? $linkOpts['text'] : '';
if ($link == '' || $text == '') return '';
return sprintf('<a href="%s">%s</a>', $link, htmlspecialchars($text));
}
}
现在,当您创建元素时,您需要做的就是添加ViewHelper
装饰器,并传递一些链接选项。
$fileDecorators = array(
'File',
array('ViewHelper', array('helper' => 'link')), // Add ViewHelper decorator telling it to use our Link helper
'Errors',
array('Description', array('tag' => 'p', 'class' => 'description')),
array('HtmlTag', array('class' => 'form-div')),
array('Label', array('class' => 'form-label', 'requiredSuffix' => '*'))
);
$this->addElement('file', 'file1', array(
'label' => 'File Upload:',
'required' => false,
'decorators' => $fileDecorators,
'validators' => array(
/* validators here */
),
'linkOpts' => array('href' => 'http://site.com/page/link',
'text' => 'This is the link text',
),
));
现在,如果您为文件元素使用该堆装饰器,并向元素提供linkOpts
,它将在File输入后呈现链接。如果未提供linkOpts
,或href
或text
元素,则在File元素后不会输出任何链接。
希望有所帮助。