Получить путь к загруженному изображению в 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? Нужно ли хранить какую-либо другую информацию для получения изображения?


person stefun    schedule 25.08.2016    source источник


Ответы (1)


Возвращаемый itemid — это временный идентификатор области черновика, в которой хранится файл во время отображения формы. Вам необходимо скопировать файл в его «реальное» место, когда форма будет отправлена, иначе файл будет автоматически удален через несколько дней (и он будет доступен только пользователю, который его изначально загрузил).

Я всегда рекомендую использовать элемент диспетчера файлов, если вы планируете хранить файл (элементы выбора файлов предназначены для файлов, которые вы хотите обработать и удалить, например, при загрузке данных файла 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. Для этих файлов (в вашем случае может быть только 1 файл) сгенерируйте URL-адрес с помощью moodle_url::make_pluginfile_url.
  6. Убедитесь, что ваш плагин имеет функцию PLUGINNAME_pluginfile() в lib.php, чтобы проверять входящие запросы файлов, выполнять их проверки безопасности, а затем обслуживать файл.

Есть разумный пример всего этого по адресу: https://github.com/AndyNormore/filemanager.

person davosmith    schedule 25.08.2016