Мне нужно сохранить файл в Moodle. Это не проблема, это объясняется здесь . Проблема в том, что этот файл должен быть доступен для всех. Следовательно, должен быть URL-адрес, например www.mymoodlesite.com/temp/myfile.txt
или тому подобное, который можно ввести в один браузер и получить доступ к файлу. Я думал о копировании файла в папку moodledata / temp, но тогда у меня нет URL-адреса, чтобы получить доступ к файлу.
Заранее спасибо за помощь!
Наконец, я смог решить свою проблему 🙂
Я использовал filemanager следующим образом:
$mform->addElement('filemanager', 'my_filemanager', 'Upload a file', null, array('maxbytes' => $CFG->maxbytes, 'maxfiles' => 1, 'accepted_types' => array('*.zip')));
Затем сохранил загруженный файл следующим образом:
if ($draftitemid = file_get_submitted_draft_itemid('my_filemanager')) { file_save_draft_area_files($draftitemid, $context->id, 'mod_assignment', 'my_filemanager', 0, array('subdirs' => false, 'maxfiles' => 1)); }
Затем URL-адрес для доступа к загруженному файлу можно создать следующим образом:
file_encode_url($CFG->wwwroot . '/pluginfile.php', '/' . $this->context->id . '/mod_assignment/my_filemanager');
Предполагая, что вы добавили элемент следующим образом:
$mform->addElement('filepicker', 'file', "Upload a Document", null, array('maxbytes' => 1024*1024, 'accepted_types' =>array('*.png', '*.jpg', '*.gif','*.jpeg', '*.doc', '*.rtf','*.pdf','*.txt')));
Теперь предположим, что вы получаете данные как следующие
$data = $lesson_form->get_data()
См. Приведенный ниже код для загрузки файла в указанную папку на вашем сервере. Это совместимо с moodle 2.2+
$realfilename = $lesson_form->get_new_filename('file'); // this gets the name of the file $random =rand(); // generate some random number $new_file = $random.'_'.$realfilename; //add some random string to the file $dst = "uploads/$new_file"; // directory name+ new filename if($realfilename !=''){ // checking this to see if any file has been uploaded save_files($dst); // moodle function to save a file in given folder }
Я столкнулся с той же проблемой, с которой вы столкнулись, и это решило мою проблему.
NB -> Помните, что chmod загружает папку в 0777.
Вы можете получить доступ к файлам, загруженным через браузер файла moodle, без проверки подлинности, если верно следующее: на вашем сайте moodle установлен forcelogin no – ваш файл загружает файлы в файлы сайта frontpage.
Загруженные файлы сохраняются (при условии Moodle1.9) в moodledata / 1 / {filepath}. Так как вы должны сделать это программно, вы можете сохранить их там и ссылаться на них, используя url /file.php/1/{filepath}. Сказать это по-другому. Файлы, сохраненные в $ CFG-> datadir. '/ 1 /'. Filepath доступны с помощью файла $ CFG-> wwwroot. '/ File.php / 1 /'. Filepath;
В качестве альтернативы, если вы не хотите, чтобы файлы отображались в файлах сайта главной страницы через браузер файлов moodle, вы можете отредактировать файл.php, чтобы забыть проверить разрешения на файлы, расположенные в вашем специальном каталоге, и вместо этого просто обслуживать их.
Надеюсь, что это поможет в этом редактировании.