代码之家  ›  专栏  ›  技术社区  ›  Vasilij Altunin

Joomla在保存后设置“file”字段值

  •  1
  • Vasilij Altunin  · 技术社区  · 8 年前

    <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();
    }        
    

    media

    这里可能有什么问题?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Vasilij Altunin    8 年前

    我设法解决了这个问题。无法设置的值 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 );
    

    }

    现在,只有我上传新文件时,它才会更新数据库中的文件名。