web-dev-qa-db-ja.com

画像をアップロードしてJoomla画像フォルダーに保存するフロントエンドのカスタムJoomlaモジュール

ユーザーがプロフィール画像をアップロードできるようにするカスタム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フォルダーに配置することです。

これは一般的な使用例のように聞こえますが、チェーン全体を説明する説明は見つかりませんでした。ですので、ヒント、リンク、説明、コードサンプルは高く評価されます。

どうもありがとうございます。

1
wanderlusted

さらにグーグルしてデバッグした後、私はそれを理解しました。トリックは、私が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!
        }

    }
1
wanderlusted