我尝试在moodle上制作一个插件。我在moodle 3.0上工作,我已经为我的插件创建了一个moodle表单,我想在表单上显示测验列表使用moodle select元素,当我只显示没有选择选项时显示的表单。当我尝试在select元素中添加一个选项时,使用moodle数据操作API中的代码,我的表单没有显示。
这是我的代码。
public function definition() {
global $CFG;
$courses = get_courses('id, fullname, category');
$arrcourses= array();
$arrcourses[0] = get_string('choose');
foreach($courses as $c) {
if ($c->category !=0){
$arrcourses[$c->id]=$c->fullname;
}
}
$view_form = $this->_form; // Don't forget the underscore!
$view_form->addElement('select', 'quiz_select', get_string('select_label', 'local_eg'), $arrcourses); // Add elements to your form
$view_form->setType('quiz', PARAM_INT);
$view_form->setType('quiz_select', PARAM_INT);
当我使用时,我的表单看起来像这样。 select element with list of course
但是选择元素填充课程列表,因为我使用get_course函数...然后当我尝试使用get_record_sql函数时,如下面的代码
class view_form extends moodleform {
//Add elements to form
public function definition() {
global $CFG;
$courses = get_courses('id, fullname, category');
$arrcourses= array();
$arrcourses[0] = get_string('choose');
foreach($courses as $c) {
if ($c->category !=0){
$arrcourses[$c->id]=$c->fullname;
}
}
////////////////////////////////////////////////////////////////
// THIS IS THE NEW LINE THAT I ADD TO FILL THE SELECT ELEMENT//
///////////////////////////////////////////////////////////////
$courselist=array();
$table= "quiz";
$result = $DB->get_records_list($table, 'course', array( '2'));
$view_form = $this->_form; // Don't forget the underscore!
$view_form->addElement('select', 'quiz_select', get_string('select_label', 'local_eg'), $arrcourses); // Add elements to your form
$view_form->setType('quiz', PARAM_INT);
$view_form->setType('quiz_select', PARAM_INT);
我只添加3个新行,保存并运行后,我的表单消失了...... 任何人都可以帮我解决这个问题???
答案 0 :(得分:3)
首先,启用调试(https://docs.moodle.org/en/Debugging) - 这会立即告诉您问题是什么。
其次,如果不在函数中声明它们,则不能使用任何类型的全局变量。你需要添加'global $ DB;'在您第一次在函数中使用$ DB之前。在这种情况下,最好的办法是将其添加到现有的全球线上,给出“全球$ CFG,$ DB;”。