我正在使用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);
任何帮助将不胜感激。
答案 0 :(得分:1)
您必须使用javascript来实现此目的,因为Moodle无法以嵌套方式填充数据。
添加AMD模块js文件,您将在其中调用用于显示的mform。
在呈现Mform的文件中
string
添加以下行以调用您的amd js文件。
$mform->render();
在您的amd js文件中,进行httprequest / ajax调用,以根据您的course_code选择下拉更改获取数据。
谢谢。