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

1 php module moodle android-activity

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

我阅读了有关文件 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);
Run Code Online (Sandbox Code Playgroud)

所以我将以下几行放入 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);
Run Code Online (Sandbox Code Playgroud)

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

Rus*_*and 5

这是上传文件的模板。

在本地/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();
Run Code Online (Sandbox Code Playgroud)

然后在 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'));

    }
}
Run Code Online (Sandbox Code Playgroud)

您还需要在 /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);
}
Run Code Online (Sandbox Code Playgroud)