web-dev-qa-db-ja.com

カスタムコンポーネント用の単純な画像アップローダーを作成する方法

画像を含む単一のレコードのデータを作成、編集、保存するためのカスタムコンポーネントを開発しています。 admin/models/forms/record.xmlにはフィールド_name="image" type="file" accept="image/*"_が必要ですが、どのように、どこに特定のフォルダーに画像をアップロードするための単純なphp-code、どのファイル、どのように?リンクから例のコードをどこに書き込むか https://docs.joomla.org/How_to_use_the_filesystem_package

EDITED:これで、admin/com_mycom/controllers/record.php コード:

_public function save($data = array(), $key = 'id')
    {
        $file = JRequest::getVar('image', null, 'files', 'array');
        $filename = JFile::makeSafe($file['name']);
        $src = $file['tmp_name'];
        $dest = "media/com_mycom/img/".$filename;
        if (JFile::upload($src, $dest)) {
              //Redirect to a page of your choice
        } else {
              //Redirect and throw an error message
        }
        parent::save();
    }
_

$ data = array()、$ key = 'id'関数allowEdit()から取得

解決しました...したがって、問題は入力の名前にありました。 JRequest :: getVarには 'image'が含まれていますが、入力type = "file"にはname = "jform [image]"が含まれています。私はコードを見つけました:

_$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$file = $files['image'];
_

の代わりに

_$file = JRequest::getVar('image', null, 'files', 'array');
_

そして今ファイルがアップロードされていますが、残念ながらその名前はDBで更新されていません

さて、私はif (JFile::upload($src, $dest)) {の下にコードを追加しました:

_$thisID = JRequest::getVar('id');
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$fields = array($db->quoteName('image') . " = " . $db->quote($filename));
$conditions = array($db->quoteName('id') . " = " . $thisID);
$query->update($db->quoteName('#__mycom'))->set($fields)->where($conditions);
$db->setQuery($query);
$db->execute($query);
_

しかし、DB内のファイル名を更新する最も簡単な方法はありますか?

4
stckvrw

それをコントローラーに追加する必要があります。おそらくcontrollers/record.phpsave関数をオーバーライドします。

public function save($key = NULL, $urlVar = NULL)
{
  // Upload your image

  // Save item
  parent::save();
}

[〜#〜]更新[〜#〜]

"ファイルの移動に失敗しました"エラー

これは間違った$dest値。宛先は絶対パスでなければなりません。

間違った:

$dest = "media/com_mycom/img/".$filename;

正しい:

$dest = JPATH_SITE."/media/com_mycom/img/".$filename;
4
Rene Korss

com_mediaコンポーネントの管理者部分を参照することをお勧めします。すべてのファイルアップロード関連の機能が開発されています。

また、ファイルシステムに関連するエラー処理やその他のチェックも含まれます。

1
Saurin Dashadia