2017-09-26 14 views
1

내 백엔드 구성 요소의 경우 내 항목에 대한 이미지를 업로드 할 수 있어야합니다. 그것은 모두가 잘 작동, 나는 이미지 필드를 추가 : 다음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 필드 유형을 사용하면 올바르게 작동합니다.

여기에 무슨 문제가있을 수 있습니까?

나는 미디어 매니저가 작동하기를 좋아하지 않았다.

+1

좋아, 내가 부분적으로 해결책을 찾는다 - https://stackoverflow.com/questions/12927464/how-to-save-uploaded-files-name-on-database 이제 DB에 업로드 파일 이름을 저장하지만 여전히 않았다 내가 항목을 열 때 그것을 적재하십시오. –

답변

1

이 문제를 해결할 수 있습니다. 보안상의 이유로 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); 

}

는 이제 DB에 파일 이름을 업데이트합니다.