$mform->addElement('filepicker' ....) 不显示表单元素文件选择器和文件管理器错误代码:noguest
Form element filepicker and file manager are not displaying by $mform->addElement('filepicker' .... ) Error code: noguest
我正在尝试在 moodle v3 的注册表单中添加上传文件输入
通过在 moodle/login/signup_form.php
中使用 $mform->addElement('filepicker' .... )
但是我收到这个错误:
Error code: noguest
Stack trace:
line 488 of /lib/setuplib.php: moodle_exception thrown
line 348 of /lib/filelib.php: call to print_error()
line 131 of /lib/form/filepicker.php: call to file_get_unused_draft_itemid()
line 189 of /lib/pear/HTML/QuickForm/Renderer/Tableless.php: call to MoodleQuickForm_filepicker->toHtml()
line 2806 of /lib/formslib.php: call to HTML_QuickForm_Renderer_Tableless->renderElement()
line 408 of /lib/pear/HTML/QuickForm/element.php: call to MoodleQuickForm_Renderer->renderElement()
line 1639 of /lib/pear/HTML/QuickForm.php: call to HTML_QuickForm_element->accept()
line 1714 of /lib/formslib.php: call to HTML_QuickForm->accept()
line 1682 of /lib/pear/HTML/QuickForm.php: call to MoodleQuickForm->accept()
line 442 of /lib/pear/HTML/Common.php: call to HTML_QuickForm->toHtml()
line 204 of /lib/pear/HTML/QuickForm/DHTMLRulesTableless.php: call to HTML_Common->display()
line 933 of /lib/formslib.php: call to HTML_QuickForm_DHTMLRulesTableless->display()
line 117 of /login/signup.php: call to moodleform->display()
所以我认为这意味着来宾用户不允许使用文件选择器
那么如何解决这个问题?
万一有人需要答案,我终于找到了解决办法。
但是首先访客用户不能使用filepaicker/filemanager
的原因是文件区的草稿文件是根据用户ID存储的,访客用户不应该将数据存储在系统(否则以 'guest' 身份登录的不同人可能会访问彼此的草稿文件)。
解决方法是:使用$mform->addElement('file' .... )
,使用RegEx和$mform->addRule()
进行校验,如下:
$mform->addRule('document_1', 'Error (allowed extensions are .jpg, .png and .pdf)', 'filename', 'myregex');
moodle 访客和未登录用户不允许上传任何内容。
如果您仍然想在注册表单中添加文件选择器,则需要修改以下代码。
1./lib/filelib.php(编辑以下函数)
function file_get_unused_draft_itemid() {
if (isguestuser() or !isloggedin()) {
// print_error('noguest');
}
}
在简短评论 "print_error('noguest')" 行 .
/lib/dml/moodle_database.php(编辑以下函数)
public function get_record_select($table, $select, array $params=null,$fields='*',$strictness=IGNORE_MISSING){
if ($select) {
$select = "WHERE $select";
}
try {
return $this->get_record_sql("SELECT $fields FROM {" . $table . "} $select", $params, $strictness);
} catch (dml_missing_record_exception $e) {
if (!isloggedin()){}
else{
// create new exception which will contain correct table name
throw new dml_missing_record_exception($table, $e->sql, $e->params);
}
}
}
将以上代码编辑到相应的文件中,您将获得解决方案。
我正在尝试在 moodle v3 的注册表单中添加上传文件输入
通过在 moodle/login/signup_form.php
$mform->addElement('filepicker' .... )
但是我收到这个错误:
Error code: noguest
Stack trace:
line 488 of /lib/setuplib.php: moodle_exception thrown
line 348 of /lib/filelib.php: call to print_error()
line 131 of /lib/form/filepicker.php: call to file_get_unused_draft_itemid()
line 189 of /lib/pear/HTML/QuickForm/Renderer/Tableless.php: call to MoodleQuickForm_filepicker->toHtml()
line 2806 of /lib/formslib.php: call to HTML_QuickForm_Renderer_Tableless->renderElement()
line 408 of /lib/pear/HTML/QuickForm/element.php: call to MoodleQuickForm_Renderer->renderElement()
line 1639 of /lib/pear/HTML/QuickForm.php: call to HTML_QuickForm_element->accept()
line 1714 of /lib/formslib.php: call to HTML_QuickForm->accept()
line 1682 of /lib/pear/HTML/QuickForm.php: call to MoodleQuickForm->accept()
line 442 of /lib/pear/HTML/Common.php: call to HTML_QuickForm->toHtml()
line 204 of /lib/pear/HTML/QuickForm/DHTMLRulesTableless.php: call to HTML_Common->display()
line 933 of /lib/formslib.php: call to HTML_QuickForm_DHTMLRulesTableless->display()
line 117 of /login/signup.php: call to moodleform->display()
所以我认为这意味着来宾用户不允许使用文件选择器
那么如何解决这个问题?
万一有人需要答案,我终于找到了解决办法。
但是首先访客用户不能使用filepaicker/filemanager
的原因是文件区的草稿文件是根据用户ID存储的,访客用户不应该将数据存储在系统(否则以 'guest' 身份登录的不同人可能会访问彼此的草稿文件)。
解决方法是:使用$mform->addElement('file' .... )
,使用RegEx和$mform->addRule()
进行校验,如下:
$mform->addRule('document_1', 'Error (allowed extensions are .jpg, .png and .pdf)', 'filename', 'myregex');
moodle 访客和未登录用户不允许上传任何内容。
如果您仍然想在注册表单中添加文件选择器,则需要修改以下代码。
1./lib/filelib.php(编辑以下函数)
function file_get_unused_draft_itemid() {
if (isguestuser() or !isloggedin()) {
// print_error('noguest');
}
}
在简短评论 "print_error('noguest')" 行 .
/lib/dml/moodle_database.php(编辑以下函数)
public function get_record_select($table, $select, array $params=null,$fields='*',$strictness=IGNORE_MISSING){ if ($select) { $select = "WHERE $select"; } try { return $this->get_record_sql("SELECT $fields FROM {" . $table . "} $select", $params, $strictness); } catch (dml_missing_record_exception $e) { if (!isloggedin()){} else{ // create new exception which will contain correct table name throw new dml_missing_record_exception($table, $e->sql, $e->params); } } }
将以上代码编辑到相应的文件中,您将获得解决方案。