Joomla在保存后设置`file`字段值

问题描述:

对于我的后端组件,我需要为我的项目上传图片。这一切工作正常,我加场图像:Joomla在保存后设置`file`字段值

<field 
    type="file" 
    name="category_image" 
    accept="image/*" 
    label="COM_SKYCATALOG_ITEM_CATEGORY_IMAGE_LABEL" 
    directory="" 
    preview="false" 
/> 

,然后更新save()方法来控制上传:

$jinput = JFactory::getApplication()->input; 
$files = $jinput->files->get('jform');  

$fileinfo =pathinfo($files['category_image']['name']); 

$ext = $fileinfo['extension']; 
$filename = time().".$ext";  

$tmp_file = $files['category_image']['tmp_name']; 

$dest = "../media/com_xxxxx/upload/".$filename; 

if (JFile::upload($tmp_file, $dest)) { 
     // successed :) 
} else {    
    // failed :(
echo "FAAAIL!!!"; 
die(); 
}   

当我选择文件并保存项目,文件上传到文件夹,但随后类别图像字段为空。而且在mysql表中的category_image字段没有更新,但是当我使用media字段类型时,它工作正常。

这里有什么可能的错误?

我不喜欢媒体经理,因为它慢了很多。

+1

好吧,我找到部分解决方案 - https://*.com/questions/12927464/how-to-save-uploaded-files-name-on-database现在它保存在db上传的文件名,但仍然没有当我打开物品时加载它 –

我设法解决这个问题。由于安全原因,您不能将input标记的值设置为file类型。我的意思是你可以设置value属性,但字段将显示为空白。

所以我只需要创建一个自定义字段是这样的:

class JFormFieldSkyupload extends JFormField 
{ 
    /** 
    * The field type. 
    * 
    * @var   string 
    */ 
    protected $type = 'Skyupload'; 

    /** 
    * Method to get a list of options for a list input. 
    * 
    * @return array An array of JHtml options. 
    */ 
    public function getInput() { 
     return '<div class="filename_labe">'.$this->value.'</div><input name="'.$this->name.'" id="'.$this->id.'" accept="image/*" aria-invalid="false" type="file" value="'.$this->value.'">'; 
     // code that returns HTML that will be shown as the form field 
    } 

} 

,也是我取得了上传代码一些变化,因此即使没有选择新的文件,我能够保存表单没有错误:

if ($files['category_image']['name']!="") 
{ 
    $fileinfo =pathinfo($files['category_image']['name']); 

    $ext = JFile::getExt($files['category_image']['name']); 
    $filename = time().".$ext"; 

    $tmp_file = $files['category_image']['tmp_name']; 

    $dest = "../media/com_skycatalog/upload/".$filename; 

    if (JFile::upload($tmp_file, $dest)) { 
    // successed :) 
    } else {     
    // failed :(
    echo "FAAAIL!!!"; 
    die();  
    }   

$data = JRequest::getVar('jform', null, 'post', 'array'); 
$data['category_image'] = strtolower($filename); 
JRequest::setVar('jform', $data); 

}

现在它将会在数据库更新文件名只如果我上传新文件。