ユーザーがプロフィール画像をアップロードできるようにするカスタムJoomlaモジュールに取り組んでいます。 JFormを作成し、以下のようにフォームフィールドタイプ "file"を使用したいと思いました。
<field name="Photo" type="file" label="Profile photo" size="10" accept="image/*" />
<field
name="MAX_FILE_SIZE"
value="5242880"
type="hidden"
/>
フォームは見栄えがよく、コンピュータから任意の画像を参照してフォームを送信できます。しかし、投稿されたフィールドをダンプすると、写真フィールドに、パスも含めて、画像の名前を含む単純な文字列があることがわかります。
私がしたいことは、その画像を取得して安全かどうかを確認し、それをアップロードして、imagesフォルダーの下の指定されたJoomlaフォルダーに配置することです。
これは一般的な使用例のように聞こえますが、チェーン全体を説明する説明は見つかりませんでした。ですので、ヒント、リンク、説明、コードサンプルは高く評価されます。
どうもありがとうございます。
さらにグーグルしてデバッグした後、私はそれを理解しました。トリックは、私がJFormを使用していて、ファイルフィールドへのアクセス方法が少し異なることです。最初にfieldsタグにアクセスし、次にfileフィールド自体にアクセスする必要があります(以下の太字の行を参照)。
フォームxml:
<form>
<fields name="main">
<fieldset name="basic" addfieldpath="/modules/mod_gng_regguide/models/fields">
...
<field name="photo" type="file" label="Profile photo"/>
</fieldset>
</fields>
</form>
そして画像をアップロードするコード:
public static function uploadPhoto(GNGLocation $loc) {
$input = JFactory::getApplication()->input;
**$file = $input->files->get('main')["photo"];**
// Cleans the name of the file by removing weird characters
$filename = JFile::makeSafe($file['name']);
$src = $file['tmp_name'];
$dest = JPATH_SITE . "/images/Guides/" . $loc->get('name') . "/" . $filename;
if (JFile::upload($src, $dest))
{
// The file has successfully been uploaded :)
}
else
{
// Oh crap, something happened. Run!
}
}