1

我添加了自定义列来存储公司徽标。我使用了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 获取图像路径?我是否需要存储任何其他信息来检索图像?

4

1 回答 1

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. 当您想向用户显示文件时,获取存储在文件区域中的文件列表(由您在 file_prepare_standard_filemanager 和 file_postupdate_standard_filemanager 中使用的组件、文件区域、上下文以及可选的 itemid 定义)。你可以这样做: $fs = get_file_storage(); $fs->get_area_files()。
  5. 对于这些文件(在您的情况下可能只有 1 个文件),使用 moodle_url::make_pluginfile_url 生成 URL。
  6. 确保您的插件在 lib.php 中有一个 PLUGINNAME_pluginfile() 函数,以检查传入的文件请求,对其进行安全检查,然后提供文件。

所有这一切都有一个合理的例子:https ://github.com/AndyNormore/filemanager

于 2016-08-25T14:33:23.943 回答