以编程方式在Moodle上的课程下上载PDF(或任何文件)

时间:2015-08-17 07:18:47

标签: api pdf moodle

我的公司已经要求我创建一个引擎,它将移动我们系统中的所有文件(材料主要是PDF文件)在Moodle课程下。

我已将所有文件复制到moodledata目录下的文件夹下,并且我有一张excel表,其中包含所有文件名和路径以及相关课程(在Moodle下创建的课程)。

我需要的是如何使用File API将某个文件链接到某个课程,以便在Moodle课程下显示该文件。

任何意见都表示赞赏。

2 个答案:

答案 0 :(得分:3)

对此没有一个简单,快速的答案,因为Moodle File API只是问题的一半 - 另一半是添加了一个'资源的实例'模块到课程,对于每个文件,因此用户可以通过某种方式访问​​您添加的文件。

对于每个文件,您需要:

  1. 创建草稿文件区域
  2. 将文件添加到草稿文件区域(使用文件API和$ fs-> create_file_from_pathname()函数)
  3. 使用'资源'的详细信息调用函数add_moduleinfo()。您要创建的模块实例(然后将传递给add_resource_instance函数,该函数将从草稿区域中提取文件并将其存储在需要的位置)。
  4. 如果不为你写出所有代码,我就无法详细说明。

答案 1 :(得分:1)

嘿,这对我来说仍然有用!

@davos

  

如果不为你写出所有代码,我就无法详细说明。

真的,现在?你是在StackOverflow上发布的,而不是在你大学的留言板上:(

我得到的是:

$pdf_output = $dompdf->output();


$fs = get_file_storage();
$context = context_course::instance($course->id);
// Prepare file record object
$fileinfo = array(
    'contextid' => $context->id, // ID of context
    'component' => 'mod_mymod', // usually = table name
    'filearea' => 'mymod',     // usually = table name
    'itemid' => $id,   // usually = ID of row in table
    'filepath' => '/',           // any path beginning and ending in /
    'filename' => 'test.pdf'); // any filename

$file = $fs->get_file($fileinfo['contextid'], $fileinfo['component'], $fileinfo['filearea'],
        $fileinfo['itemid'], $fileinfo['filepath'], $fileinfo['filename']);

// Delete it if it exists
if ($file) {
    $file->delete();
}

$file = $fs->create_file_from_string($fileinfo, $pdf_output);

$file = $fs->get_file($fileinfo['contextid'], $fileinfo['component'], $fileinfo['filearea'],
                      $fileinfo['itemid'], $fileinfo['filepath'], $fileinfo['filename']);

// Read contents
if ($file) {
  $contents = $file->get_content();
  var_dump($contents);
}

我可以阅读内容并将其转储到浏览器中。 我无法弄清楚的是如何使用“add_moduleinfo()”将我的pdf存储在课程中。

功能签名是:

function add_moduleinfo($moduleinfo, $course, $mform = null) {

唉,没有解释$ moduleinfo应该包含什么,因为moodle没有记录。

任何提示都非常受欢迎。