如何在magento管理表单中显示上传的文件名?

时间:2013-10-10 06:05:32

标签: magento

如何在magento自定义模块表单上成功上传文件后显示上传的文件名或链接。我附上了截图以便清楚了解。请帮助enter image description here

2 个答案:

答案 0 :(得分:12)

要执行此操作,您需要为表单中的file输入自定义渲染器。 为此创建以下类:

<?php
class {{Namespace}}_{{Module}}_Block_Adminhtml_{{Entity}}_Helper_File extends Varien_Data_Form_Element_Abstract{
    public function __construct($data){
        parent::__construct($data);
        $this->setType('file');
    }
    public function getElementHtml(){
        $html = '';
        $this->addClass('input-file');
        $html.= parent::getElementHtml();
        if ($this->getValue()) {
            $url = $this->_getUrl();
            if( !preg_match("/^http\:\/\/|https\:\/\//", $url) ) {
                $url = Mage::getBaseUrl('media').'{{entity}}'.'/'.'file' . $url; //replace this with the path to the file if you upload it somewhere else
            }
            $html .= '<br /><a href="'.$url.'">'.$this->_getUrl().'</a> ';
        }
        $html.= $this->_getDeleteCheckbox();
        return $html;
    }
    protected function _getDeleteCheckbox(){
        $html = '';
        if ($this->getValue()) {
            $label = Mage::helper('{{module}}')->__('Delete File');
            $html .= '<span class="delete-image">';
            $html .= '<input type="checkbox" name="'.parent::getName().'[delete]" value="1" class="checkbox" id="'.$this->getHtmlId().'_delete"'.($this->getDisabled() ? ' disabled="disabled"': '').'/>';
            $html .= '<label for="'.$this->getHtmlId().'_delete"'.($this->getDisabled() ? ' class="disabled"' : '').'> '.$label.'</label>';
            $html .= $this->_getHiddenInput();
            $html .= '</span>';
        }       
        return $html;
    }
    protected function _getHiddenInput(){
        return '<input type="hidden" name="'.parent::getName().'[value]" value="'.$this->getValue().'" />';
    }
    protected function _getUrl(){
        return $this->getValue();
    }
    public function getName(){
        return $this->getData('name');
    }
}

然后你需要告诉你将其用于文件输入。因此,在编辑表单选项卡中,在定义fiedlset后立即添加:

$fieldset->addType('file', Mage::getConfig()->getBlockClassName('{{module}}/adminhtml_{{entity}}_helper_file'));

{{Namespace}},{{Module}}和{{Entity}}替换为保留大小写的适当值。
Namespace是模块的命名空间(D'呃),Module是模块的名称(D'uh),实体就是你管理的。可以是ArticleNewsFiles ....
[编辑]
您可以使用this module creator构建模块。它解决了这些问题 注意:我希望这不被认为是自我推销。扩展是免费的,我没有任何经济利益。

答案 1 :(得分:0)

好的,我发现自己回答了......

只需创建一个文件并使用magento核心抽象类Namespace_ModuleName_Block_Adminhtml_Modulename_Helper_File extends Varien_Data_Form_Element_Abstract

进行扩展

并将以下代码添加到管理表单

 $fieldset = $form->addFieldset('Module_form', array('legend'=>Mage::helper('Module')->__('Video information')));
        $fieldset->addType('file', Mage::getConfig()->getBlockClassName('Module/adminhtml_Module_helper_file'));   /* line added  */