2

在magento自定义模块表单中成功上传文件后,如何显示上传的文件名或链接。我附上了截图以便清楚理解。请帮助在此处输入图像描述

4

2 回答 2

13

为此,您需要为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');
    }
}

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

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

替换{{Namespace}}, {{Module}} 并{{Entity}}用适当的值保持大小写。
Namespace是您的模块的名称空间(D'uh),Module是您的模块的名称(再次是D'uh),Entity 是您管理的内容。可以是Article, News, Files....
[编辑]
您可以使用此模块创建器构建您的模块。它会处理这类问题。
注意:我希望这不是自我推销。扩展是免费的,我没有从中获得任何经济利益。

于 2013-10-10T06:41:59.673 回答
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  */
于 2013-10-10T06:38:18.293 回答