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



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

我阅读了有关文件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);
}

最新更新