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

Php 在moodle中编辑文件管理器时如何检索文件,php,android-activity,module,moodle,Php,Android Activity,Module,Moodle,我目前正在实习,我试着制作一个活动模块来显示播放列表,播放的是一个文件管理员提供的视频。我成功地将视频发送到数据库,但当我想要编辑我的模块时,它不会在filemanager中显示任何视频 我阅读了关于的moodle文档,并决定使用以下代码(将现有文件加载到草稿区) : 所以我在mod_form.php中放了以下几行: $filemanager_options = array(); $filemanager_options['accepted_types'] = '*'; $f

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

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

:

所以我在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);
}

这是一个上传文件的模板

在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);
}

谢谢,这正是我需要知道的!:)伙计。。。这个lib.php让我又省了一天的工作。我已经花了一天时间在文件显示部分使用lib.php。文档中的原件根本不适合我。非常感谢。谢谢,这正是我需要知道的!:)伙计。。。这个lib.php让我又省了一天的工作。我已经花了一天时间在文件显示部分使用lib.php。文档中的原件根本不适合我。非常感谢。