Moodle 基于用户角色创建CSS类

Moodle 基于用户角色创建CSS类,moodle,Moodle,使用Moodle 3.9和当前主题的分支 我试图在元素上创建一个基于用户角色的css类挂钩。我知道用户的角色是上下文驱动的(可能是一门课程中的学生,也可能是另一门课程中的其他学生),所以我会将所有角色作为给定上下文的类输出 基于对moodle论坛的广泛挖掘,我得出以下结论: // User role based CSS classes global $USER, $PAGE; $context = context_system::instance(); $roles = get_user_rol

使用Moodle 3.9和当前主题的分支

我试图在
元素上创建一个基于用户角色的css类挂钩。我知道用户的角色是上下文驱动的(可能是一门课程中的学生,也可能是另一门课程中的其他学生),所以我会将所有角色作为给定上下文的类输出

基于对moodle论坛的广泛挖掘,我得出以下结论:

// User role based CSS classes
global $USER, $PAGE;
$context = context_system::instance();
$roles = get_user_roles($context, $USER->id, true);
if(is_array($roles)) {
    foreach($roles as $role) {
        $PAGE->add_body_class('role-'.$role->shortname);
    }
} else {
        $PAGE->add_body_class('role-none');
}
最好是在每一页上都运行这个。在这个主题中,我试着把它放在我认为可以提前执行的每个位置/函数中,以修改body元素。我要么根本没有得到任何输出,要么收到一条警告,表明已经太晚无法运行


我已经略读了和API,但仍然不知道如何或何时执行此代码。这应该是一个自定义插件吗?

另一个解决方案可能是使用javascript(来自php)修改body类。不幸的是,使用js无法解决在任何给定页面上下文中获取当前用户角色数组的基本问题(php)。我想用php获取用户角色并像这样回送js:echodocument.getElementsByTagName(“正文”)[0].classList.add(\“”.$userRole。“\”)";我的问题是在PHP
$roles
中没有返回数组,所以我根本没有选择角色。因此,要么代码没有被正确激活,要么我误解了moodle中用户角色或上下文的性质。这是一个需要对Moodle有相当深入的理解的问题;当您处于课程环境中时