填写一个字段后如何自动填写其他表格字段?

时间:2019-08-26 09:59:04

标签: php forms moodle

我正在使用moodleform类在moodle中创建表单。我在表格中有很多字段。我想要做的是,当用户填写第一个字段时,我想获取他/她输入的数据,在相关的数据库表中搜索与该输入匹配的字段,然后为该记录填充其他字段。

请注意,用户尚未按下任何提交按钮。我一直在试图找到一个获取输入数据的函数,但是所有的努力都是徒劳的。我发现的是一个get_data()方法,但我什至不知道如何正确使用它。我一直在阅读moodle文档,但没有任何帮助。我不是编码初学者,但我也不是专家。

这是一个代码段:

class requestcourse_form extends moodleform
{
    function definition() 
    {   
    global $CFG, $currentsess, $DB, $USER, $currentrecord; 

    $mform =& $this->_form; // Don't forget the underscore! 

    // Form header
    $mform->addElement('header', 'mainheader','<span style="font-size:22px">'.get_string('courserequestform','block_usp_mcrs'). '</span>');

    // Course Code field. 
    $coursecodearray = array();
    $coursecodearray[0] = get_string('choosecoursecode', 'block_usp_mcrs');
    $allcoursecodes = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_code');
    foreach ($allcoursecodes as $id => $coursecodeobject) {
        $coursecodearray[$id] = $coursecodeobject->course_code;
    }
    $coursecode = $mform->addElement('select', 'coursecode', get_string('coursecode', 'block_usp_mcrs'), $coursecodearray);
    $mform->addRule('coursecode', get_string('required'), 'required', null, 'client');
    $mform->setType('coursecode', PARAM_RAW);

    // Course Name field. TODO: Course Name to pick automatically after entering Course Code
    $coursenamearray = array();
    $coursenamearray[0] = get_string('choosecoursename', 'block_usp_mcrs');
    $allcoursenames = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_name');
    foreach ($allcoursenames as $id => $coursenameobject) {
        $coursenamearray[$id] = $coursenameobject->course_name;
    }
    $mform->addElement('select', 'coursename', get_string('coursename', 'block_usp_mcrs'), $coursenamearray);
    $mform->addRule('coursename', get_string('required'), 'required', null, 'client');
    $mform->setType('coursename', PARAM_RAW);

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您必须使用javascript来实现此目的,因为Moodle无法以嵌套方式填充数据。

添加AMD模块js文件,您将在其中调用用于显示的mform。

在呈现Mform的文件中

string

添加以下行以调用您的amd js文件。

$mform->render();

在您的amd js文件中,进行httprequest / ajax调用,以根据您的course_code选择下拉更改获取数据。

谢谢。