1

ファイルをロードして、コースにアクセスできる学生に表示するmoodleのmodアクティビティをプログラミングしています。

問題は、moodle でファイルを扱うのが非常に難しいことです。

これは私がこれまでに行ったことです:

インポーターのオプションページ

$mform->addElement('filepicker', 'slidesyncmedia', get_string('slidesyncmedia', 'slidesync'), null, array('maxbytes' => $maxbytes, 'accepted_types' => '*'));

$mform->addElement('filemanager', 'slidesyncslides', get_string('slidesyncslides', 'slidesync'), null, array('subdirs' => 0, 'maxbytes' => $maxbytes, 'maxfiles' => 50, 'accepted_types' => array('*') ));

送信後、ファイルはドラフトに保存され、すべてがデータベースに保存される別のページにロードされます

if ($draftitemid = file_get_submitted_draft_itemid('slidesyncmedia')) {
        file_save_draft_area_files($draftitemid, $context->id, 'mod_slidesync', 'slidesyncmedia', 0, array('subdirs' => 0, 'maxfiles' => 1));
    }
    if ($draftitemid = file_get_submitted_draft_itemid('slidesyncslides')) {
        file_save_draft_area_files($draftitemid, $context->id, 'mod_slidesync', 'slidesyncslides', 0, array('subdirs' => 0, 'maxfiles' => 50));
    }

最後に、別の場所で最初のページを再度使用します(ファイルがあれば、それらを表示します)

            $fs = get_file_storage();
        if ($files = $fs->get_area_files($context->id, 'mod_slidesync', 'slidesyncslides', '0', 'sortorder', false)) {
            // Look through each file being managed
            foreach ($files as $file) {
            // Build the File URL. Long process! But extremely accurate.
            $fileurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), $file->get_filearea(), $file->get_itemid(), $file->get_filepath(), $file->get_filename());
            echo $fileurl;
            }
        } else {
            echo '<p>Please upload an image first</p>';
        }

これはURLを作成しますが、moodleをクリックするとファイルが存在しないと言われます mysite.com/pluginfile.php/53/mod_slidesync/slidesyncslides/0/Koala.jpg

データベースでは、ファイルは正しく保存されています!!! 53 mod_slidesync slidesyncslides 0 / Koala.jpg

私は何が欠けていますか?

ありがとう

4

1 に答える 1

2

長い時間が経ちましたが、プラグインに取り組んでいて、同じ問題がありました。なんとか解決します。

ファイルを提供するには、以下を作成する必要があります: function MYPLUGIN_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options=array())

関数の例は次のとおりです: https://docs.moodle.org/dev/File_API#Serving_files_to_users

Moodle 2.3以降では、send_fileへの最後の呼び出しをsend_stored_fileに変更することを忘れないでください

于 2015-06-08T14:34:15.093 に答える