MOODLE数据操作:函数get_records_sql不起作用。在代码中添加get_records_sql时,我的插件表单没有显示?

时间:2016-01-20 02:30:54

标签: moodle moodle-api

我尝试在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个新行,保存并运行后,我的表单消失了...... 任何人都可以帮我解决这个问题???

1 个答案:

答案 0 :(得分:3)

首先,启用调试(https://docs.moodle.org/en/Debugging) - 这会立即告诉您问题是什么。

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