在moodle中编辑文件管理器时如何检索文件

how to retrieve files when editing a file manager in moodle

我目前正在实习,我试图制作一个 activity 模块来显示播放列表,来自文件管理员提供的视频。我成功地将视频发送到数据库,但是当我想编辑我的模块时,它没有在文件管理器中显示任何视频。

我阅读了关于 file API 的 moodle 文档,我决定使用以下代码(将现有文件加载到草稿区)

:

 if (empty($entry->id)) {
$entry = new stdClass;
$entry->id = null;
}

$draftitemid = file_get_submitted_draft_itemid('attachments');
file_prepare_draft_area($draftitemid, $context->id, 'mod_glossary','attachment', $entry->id,array('subdirs' => 0, 'maxbytes' => $maxbytes, 'maxfiles' => 50));
$entry->attachments = $draftitemid;
$mform->set_data($entry);

所以我在 mod_form.php 中添加了以下几行:

  $filemanager_options = array();
    $filemanager_options['accepted_types'] = '*';
    $filemanager_options['maxbytes'] = 0;
    $filemanager_options['maxfiles'] = -1;
    $filemanager_options['mainfile'] = true;

        $mform->addElement('filemanager', 'files', get_string('selectfiles'), null, $filemanager_options);



if (empty($entry->id)) {
    $entry = new stdClass;
    $entry->id = null;
}

$draftitemid = file_get_submitted_draft_itemid('mymanager');


file_prepare_draft_area($draftitemid, $this->context->id, 'mod_playlist', 'content', 0,
                      array('subdirs'=>true));

$entry->attachments = $draftitemid;

$mform->set_data($entry);

问题是文件管理器仍然是空的,行“$mform->set_data($entry);”使页面崩溃(空白)。

这是上传文件的模板。

在local/myplugin/upload.php

require_once(dirname(dirname(dirname(__FILE__))) . '/config.php');
require_once(dirname(__FILE__) . '/upload_form.php');

require_login();

$context = context_system::instance();

require_capability('local/myplugin:upload', $context);

$pageurl = new moodle_url('/local/myplugin/upload.php');
$heading = get_string('myupload', 'local_myplugin');
$PAGE->set_context($context);
$PAGE->set_heading(format_string($heading));
$PAGE->set_title(format_string($heading));
$PAGE->set_url('/local/myplugin/upload.php');

echo $OUTPUT->header();
echo $OUTPUT->heading($heading);

$fileoptions = array(
        'maxbytes' => 0,
        'maxfiles' => '1',
        'subdirs' => 0,
        'context' => context_system::instance()
);

$data = new stdClass();

$data = file_prepare_standard_filemanager($data, 'myfiles',
        $fileoptions, context_system::instance(), 'local_myplugin', 'myfiles', 0); // 0 is the item id.

$mform = new upload_form(
    null,
    array(
        'fileoptions' => $fileoptions,
    )
);

if ($formdata = $mform->get_data()) {
    // Save the file.
    $data = file_postupdate_standard_filemanager($data, 'myfiles',
            $fileoptions, context_system::instance(), 'local_myplugin', 'myfiles', 0);
} else {
    // Display the form.
    $mform->set_data($data);
    $mform->display();
}

echo $OUTPUT->footer();

然后在local/myplugin/upload_form.php

defined('MOODLE_INTERNAL') || die;

require_once($CFG->libdir . '/formslib.php');

class upload_form extends moodleform {

    public function definition() {
        $mform =& $this->_form;

        $fileoptions = $this->_customdata['fileoptions'];

        $mform->addElement('filemanager', 'myfiles_filemanager',
                get_string('myfiles', 'local_myplugin'), null, $fileoptions);

        $this->add_action_buttons(false, get_string('save', 'local_myplugin'));

    }
}

您在 /local/myplugin/lib 中也需要这个。php

function local_myplugin_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = array()) {

    if ($context->contextlevel != CONTEXT_SYSTEM) {
        send_file_not_found();
    }

    $fs = get_file_storage();
    $file = $fs->get_file($context->id, 'local_myplugin', $filearea, $args[0], '/', $args[1]);

    send_stored_file($file);
}