0

我尝试在moodle上制作一个插件。我在moodle 3.0上工作,我已经为我的插件创建了一个moodle表单,我想在表单上显示测验列表使用moodle 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);

当我使用它时,我的表格看起来像这样。 选择带有当然列表的元素

但是选择元素填充课程列表,因为我使用 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 个新行,保存并运行后,我的表单消失了……有人可以帮我解决这个问题吗?

4

1 回答 1

3

首先,打开调试 ( https://docs.moodle.org/en/Debugging ) - 这会立即告诉您问题所在。

其次,你不能使用任何类型的全局变量而不在你的函数中声明它们。您需要添加 'global $DB;' 在您第一次在函数中使用 $DB 之前。在这种情况下,最好的办法是将其添加到现有的全局行中,给出“global $CFG, $DB;”。

于 2016-01-20T07:38:46.070 回答