Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 乔姆拉!3/2.5:字段“;文件";上载处理程序-无法移动文件。。。但是感动了_File Upload_Joomla_Joomla2.5_Joomla3.0_Joomla3.3 - Fatal编程技术网

File upload 乔姆拉!3/2.5:字段“;文件";上载处理程序-无法移动文件。。。但是感动了

File upload 乔姆拉!3/2.5:字段“;文件";上载处理程序-无法移动文件。。。但是感动了,file-upload,joomla,joomla2.5,joomla3.0,joomla3.3,File Upload,Joomla,Joomla2.5,Joomla3.0,Joomla3.3,我正在开发一个内容插件,它向com_内容组件添加了一些额外的字段,其中一个字段的类型为“file”,声明如下: <field name="zp_zipupl" type="file" onchange="jQuery(this).closest('form').attr('enctype','multipart/form-data')" label="PLG_CONTENT_CUSTOMFIELDZ_ZP_ZIPUPL" />

我正在开发一个内容插件,它向com_内容组件添加了一些额外的字段,其中一个字段的类型为“file”,声明如下:

  <field
      name="zp_zipupl"
      type="file"
      onchange="jQuery(this).closest('form').attr('enctype','multipart/form-data')"
      label="PLG_CONTENT_CUSTOMFIELDZ_ZP_ZIPUPL"
   />
问题:
保存文章后,出现错误“警告:无法移动文件”,但如果我输入“uploads/project/”目录,文件就在那里,因此它工作了,但字段值没有存储在数据库中

如果我删除此字段的“onchange”事件,则该值存储在数据库中,但由于未指定表单enctype,因此不会上载文件(即使我手动编辑com_content article/tmpl/edit视图并设置enctype,上载时我也会遇到同样的问题)

我已经修改了J的插件代码!2.5+相同的onContentPrepare代码=>相同的行为,但文件未上载

  • 所有目录都具有正确的权限并已存在
  • 乔姆拉!3.3/乔姆拉!2.5.24 PHP 5.4(本地)/5.3(共享主机)
  • $tmp_dir目录-在本地主机(Linux,XAMPP)上-是 “opt/lampp/temp/”
  • $tmp_dir目录-在共享主机上-是 “/tmp/”
*另外,不太重要的是,如果我想用$form->getValue('field_name')获取某个字段的值,那么onContentPrepareReform;它不起作用

这是什么原因造成的


谢谢

[解决方案]
主要是,我必须使用onContentBeforeSave事件来消除该警告,并且必须手动插入数据库中的值。它对两个J都有效!3.3和2.5.x.
待办事项:保存文章而不上载新文件时,保留“file”类型字段的存储数据库值

守则:

function onContentBeforeSave($context,$article,$isNew){
    //get jform
    $jinput = JFactory::getApplication()->input;
    $jform = $jinput->get('jform', null, null);

    //get $_FILES
    $input = new JInputFiles();
    $files = $input->get('jform');
    $uploadDir = $this->params->get('cfz_upload_path');

    if( ! empty($files)) foreach ($files as $file) {
        foreach ($file as $fieldName => $fileVals) {
            $tmp_dir = $fileVals['tmp_name'];
            $dest_dir = JPATH_SITE . $uploadDir;
            $file_name_ext = $fileVals['name'];

            if(JFile::upload($tmp_dir,$dest_dir . $file_name_ext)){
                //append input value to jform
                $jform['attribs'][$fieldName] = $uploadDir . $file_name_ext;
            }
        }
    }
    else{
        //preserve file field value...
    }

    //add all attribs to $article
    $article->attribs = json_encode($jform['attribs']);
}

请将您的解决方案添加为正确答案,并将其标记为已解决
function onContentBeforeSave($context,$article,$isNew){
    //get jform
    $jinput = JFactory::getApplication()->input;
    $jform = $jinput->get('jform', null, null);

    //get $_FILES
    $input = new JInputFiles();
    $files = $input->get('jform');
    $uploadDir = $this->params->get('cfz_upload_path');

    if( ! empty($files)) foreach ($files as $file) {
        foreach ($file as $fieldName => $fileVals) {
            $tmp_dir = $fileVals['tmp_name'];
            $dest_dir = JPATH_SITE . $uploadDir;
            $file_name_ext = $fileVals['name'];

            if(JFile::upload($tmp_dir,$dest_dir . $file_name_ext)){
                //append input value to jform
                $jform['attribs'][$fieldName] = $uploadDir . $file_name_ext;
            }
        }
    }
    else{
        //preserve file field value...
    }

    //add all attribs to $article
    $article->attribs = json_encode($jform['attribs']);
}