我有一个 Moodle 表单,其中包含一个已注册为不提交按钮的按钮:
$mform->registerNoSubmitButton('preloadtest');
$mform->addElement('submit', 'preloadtest', 'Generate Test Data');
按下时我可以检测到:
if ($mform->no_submit_button_pressed()) {
$data = $mform->get_submitted_data();
if ($data->preloadtest) {
//TODO change some form value here before redisplaying form
}
$mform->set_data($data);
echo $OUTPUT->header();
$mform->display();
}
但是我一直没能在我的代码中找到更改表单元素(如文本框、自动完成或选择)值的方法。
我尝试更改
$data
中的值并在$mform
中寻找方法来更改值,但似乎只能更改被提交值覆盖的默认值。
我最终通过使用 Moodle 表单的 setConstants 方法覆盖我想更改的任何提交值来解决这个问题(可能是也可能不是正确的方法)。
在我的表单中,我添加了一个函数来访问私有 _form 属性和 setConstants 方法:
public function setConstants($data)
{
$this->_form->setConstants($data);
}
然后在我的表单处理中,我检测到没有按下提交按钮并根据提交的值更新我需要更改的任何值:
if ($mform->no_submit_button_pressed()) {
$data = $mform->get_submitted_data();
$constants = [];
if ($data->button1) {
$constants['field1'] = 'newvalueforbutton1';
} elseif ($data->button2) {
$constants['field1'] = 'newvalueforbutton2';
}
$mform->setConstants($constants);
}