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
字段类型时,它工作正常。
这里有什么可能的错误?
我不喜欢媒体经理,因为它慢了很多。
答
我设法解决这个问题。由于安全原因,您不能将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);
}
现在它将会在数据库更新文件名只如果我上传新文件。
好吧,我找到部分解决方案 - https://*.com/questions/12927464/how-to-save-uploaded-files-name-on-database现在它保存在db上传的文件名,但仍然没有当我打开物品时加载它 –