在Moodle中获取上传图片的路径

时间:2016-08-25 13:21:47

标签: moodle fileapi moodle-api

我添加了自定义列来存储公司徽标。我使用了像moodle这样的文件api:

$mform->addElement('filepicker', 'certificatelogo', 'Company Logo', null,
               array('maxbytes' => $maxbytes, 'accepted_types' => '*'));
$mform->setDefault('certificatelogo', '0');
$mform->addHelpButton('certificatelogo', 'certificatelogo', 'certificate');

提交表单后,itemid将存储在自定义列中。说" 648557354"

现在我需要获取图像以在证书上打印徽标。如何从itemid获取图像路径?我是否需要存储任何其他信息才能检索图像?

1 个答案:

答案 0 :(得分:3)

返回的itemid是在显示表单时存储文件的草稿区域的临时ID。在提交表单时,您需要将文件复制到其“真实”位置,否则文件将在几天后自动删除(并且只有最初上传该文件的用户才能访问该文件。)

如果您打算保留文件,我总是建议使用filemanager元素(filepicker元素用于您要处理和丢弃的文件,例如上传CSV文件数据以解析并添加到数据库)。

如何使用它的详细信息如下: https://docs.moodle.org/dev/Using_the_File_API_in_Moodle_forms#filemanager

但基本步骤是:

  1. 将任何现有文件从“真实”区域复制到草稿区域(file_prepare_standard_filemanager)。
  2. 显示表单。
  3. 提交时,将文件从草稿区域复制到“真实”区域(file_postupdate_standard_filemanager)。
  4. 如果要向用户显示文件,请获取存储在文件区域中的文件列表(由组件,文件区,上下文和(可选)itemid定义,在file_prepare_standard_filemanager和file_postupdate_standard_filemanager中使用)。你可以这样做:$ fs = get_file_storage(); $ FS-> get_area_files()
  5. 对于这些文件(在您的情况下可能只有一个文件),使用moodle_url :: make_pluginfile_url生成URL。
  6. 确保您的插件在lib.php中有一个PLUGINNAME_pluginfile()函数,以检查传入的文件请求,对它们进行安全检查,然后提供文件。
  7. 所有这些都有一个合理的例子:https://github.com/AndyNormore/filemanager