You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle教师enrolment通知邮件新增学生邮箱变量不生效问题

问题根因

你修改的enrol/flatfile/lib.php::process_records()属于flatfile平面文件选课插件的业务逻辑,而你实际使用的是PayPal选课方式触发通知,两个插件的邮件生成流程完全独立,PayPal选课的通知发送逻辑并没有走你修改的这段代码,因此你新增的$a->email赋值没有被执行,占位符自然不会被替换为真实值。

正确修改方案

  • 找到PayPal选课插件的逻辑文件enrol/paypal/lib.php,定位到enrol_paypal::process_payments()方法中发送选课通知的代码段
  • 找到该方法内构建通知参数$a的代码块,在调用get_string('enrolmentnewuser', 'enrol', $a)生成邮件内容之前,新增一行赋值代码:
    $a->email = $user->email;
  • 如果你同时启用了其他选课插件也需要显示学生邮箱,需要对每个启用插件的通知生成逻辑做相同修改。

可选调试技巧

无需反复退选课测试,可以直接在Moodle根目录新建临时测试脚本验证字符串替换逻辑是否正常,脚本示例:

<?php
require_once('config.php');
// 构造测试参数
$test = new stdClass();
$test->user = '测试学生';
$test->course = '测试课程';
$test->email = 'student@example.com';
// 直接打印字符串替换结果
echo get_string('enrolmentnewuser', 'enrol', $test);
?>

运行脚本即可直接看到替换效果,确认语言包修改是否生效。

额外排查项

如果修改后仍有问题,可以检查以下配置:

  • 确认站点默认语言,如果不是英文,需要修改对应语言目录下的enrol.php文件,而非仅修改lang/en/下的文件
  • 前往站点管理 > 语言 > 语言自定义页面,检查enrolmentnewuser字符串是否被后台自定义规则覆盖,自定义字符串优先级高于语言包文件配置
  • 清理Moodle缓存后建议重新加载语言包,避免缓存残留。

内容的提问来源于stack exchange,提问作者Dan Hennion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:45:04