2013-10-17 27 views
1

我正在爲moodle編寫mod活動,它可以將文件和show'em加載到任何可以訪問課程的學生。如何使用moodle file api正確存儲文件並進行檢索?

問題是,在moodle中處理文件是該死的難。

這是我迄今所做的:

選項頁面與進口商

$mform->addElement('filepicker', 'slidesyncmedia', get_string('slidesyncmedia', 'slidesync'), null, array('maxbytes' => $maxbytes, 'accepted_types' => '*')); 

$mform->addElement('filemanager', 'slidesyncslides', get_string('slidesyncslides', 'slidesync'), null, array('subdirs' => 0, 'maxbytes' => $maxbytes, 'maxfiles' => 50, 'accepted_types' => array('*'))); 

後提交的文件存儲在草案 ,一切都在另一個頁面,保存所有的分貝

if ($draftitemid = file_get_submitted_draft_itemid('slidesyncmedia')) { 
     file_save_draft_area_files($draftitemid, $context->id, 'mod_slidesync', 'slidesyncmedia', 0, array('subdirs' => 0, 'maxfiles' => 1)); 
    } 
    if ($draftitemid = file_get_submitted_draft_itemid('slidesyncslides')) { 
     file_save_draft_area_files($draftitemid, $context->id, 'mod_slidesync', 'slidesyncslides', 0, array('subdirs' => 0, 'maxfiles' => 50)); 
    } 
到底

我再次使用的第一頁在另一個地方(如果文件存在,則顯示他們)

  $fs = get_file_storage(); 
     if ($files = $fs->get_area_files($context->id, 'mod_slidesync', 'slidesyncslides', '0', 'sortorder', false)) { 
      // Look through each file being managed 
      foreach ($files as $file) { 
      // Build the File URL. Long process! But extremely accurate. 
      $fileurl = moodle_url::make_pluginfile_url($file->get_contextid(), $file->get_component(), $file->get_filearea(), $file->get_itemid(), $file->get_filepath(), $file->get_filename()); 
      echo $fileurl; 
      } 
     } else { 
      echo '<p>Please upload an image first</p>'; 
     } 

這使一個網址,但如果點擊的Moodle說文件不存在 mysite.com/pluginfile.php/53/mod_slidesync/slidesyncslides/0/Koala.jpg

在db文件是正確保存! 53 mod_slidesync slidesyncslides 0/Koala.jpg

我失蹤了什麼?

感謝

回答

0

過了很久,但我工作的一個插件,並有同樣的問題。 我設法解決它。

爲了提供您需要創建該文件: 功能MYPLUGIN_pluginfile($當然,$釐米,$背景下,$ filearea,$ ARGS,$ forcedownload,數組$選項=陣列())

這裏示例功能:https://docs.moodle.org/dev/File_API#Serving_files_to_users

切記改變最後一次調用send_file到sendmail_stored_file在Moodle 2.3+

相關問題