2017-09-26 11 views
1

私のバックエンドコンポーネントでは、自分のアイテムの画像をアップロードする必要があります。それはすべて私がイメージするためのフィールドを追加し、正常に動作します:私は、ファイルを選択し、アイテムを保存すると、保存後にJoomlaが `file`フィールド値を設定しました

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

フォルダにアップロードされたファイルが、その後カテゴリ:その後、

<field 
    type="file" 
    name="category_image" 
    accept="image/*" 
    label="COM_SKYCATALOG_ITEM_CATEGORY_IMAGE_LABEL" 
    directory="" 
    preview="false" 
/> 

とアップロードを制御するsave()方法を更新画像フィールドは空です。また、mysqlテーブルのcategory_imageフィールドも更新されませんでしたが、mediaフィールドタイプを使用するとうまく動作します。

ここで間違いがありますか?

私はメディアマネージャがうまく動作しませんでした。

+1

[OK]を私は部分的な解決策を見つける - https://stackoverflow.com/questions/12927464/how-to-save-uploaded-files-name-on-database今それはdbのアップロードファイル名で保存されますが、それでも私が商品を開いたときにそれをロードする –

答えて

1

私はこの問題を解決することができます。セキュリティ上の理由からinputタグの設定値はfileタイプでは設定できません。 valueという属性を設定できますが、フィールドwilは空白として表示されます。

ので、私はちょうどこのようなカスタムフィールドを作成:

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内のファイル名を更新します。

関連する問題