我设法解决了这个问题。无法设置的值
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 );
}
现在,只有我上传新文件时,它才会更新数据库中的文件名。