2016-08-25 8 views
0

私は、会社のロゴを保存するためのカスタムカラムを追加しました。私はムードルのファイルapiを使っています:Moodleにアップロードされた画像のパスを取得する

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

一度フォームが送信されると、itemidはカスタム列に格納されます。 "648557354"と答えてください

今、私は証明書にロゴを印刷するイメージを取得する必要があります。 itemidから画像パスを取得するにはどうすればよいですか?画像を取得するために他の情報を保存する必要がありますか?

答えて

2

返される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で使用したコンポーネント、filearea、context、およびオプションで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

で、このすべての合理的な例があります

関連する問題