我正在开发一个内容插件,该插件向 com_content 组件添加了一些额外的字段,其中一个字段的类型为“文件”,并具有以下声明:
<field
name="zp_zipupl"
type="file"
onchange="jQuery(this).closest('form').attr('enctype','multipart/form-data')"
label="PLG_CONTENT_CUSTOMFIELDZ_ZP_ZIPUPL"
/>
...我正在处理 onContentPrepare 内容事件的上传过程,如下所示:
function onContentPrepare($context,&$article,&$params,$page){
$input = new JInputFiles();
$files = $input->get('jform');
if($files) foreach ($files as $inputFile) {
foreach ($inputFile as $file) {
$tmp_dir = $file['tmp_name'];
$dest_dir = JPATH_SITE.'/uploads/projects/';
$file_name_ext = $file['name'];
JFile::upload($tmp_dir,$dest_dir . $file_name_ext);
}
}
}
问题:
保存文章后,我收到错误“警告:无法移动文件”,但如果我进入“uploads/project/”目录,文件就在那里,所以它工作了,但字段值没有存储在数据库。
如果我删除此字段的“onchange”事件,该值将存储在数据库中,但由于未指定表单 enctype,因此不会上传文件(即使我手动编辑 com_content article/tmpl/edit 视图并设置enctype 我在上传时遇到了同样的问题)。
我已经为 J! 修改了插件代码!2.5 + 相同的 onContentPrepare 代码 => 相同的行为,但文件未上传。
- 所有目录都具有正确的权限并存在。
- Joomla!3.3 / Joomla!2.5.24 PHP 5.4(本地)/5.3(共享主机)
- $tmp_dir 目录 - 在 localhost (Linux, XAMPP) 上 - 是“opt/lampp/temp/”
- $tmp_dir 目录 - 在共享主机上 - 是“/tmp/”
*另外,如果我想使用 $form->getValue('field_name'); 获取某个字段的值,那么 onContentPrepareForm 也不太重要 它不起作用...
什么可能导致这种情况?
谢谢!