使用Moodle3.9和当前Academi主题的一个分支。
我正在尝试在基于用户角色的<body>元素上创建一个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元素。我要么根本没有得到任何输出,要么得到一个警告,表明运行add_body_class()已经太晚了。
发布于 2021-10-20 14:43:19
覆盖当前主题模板的核心呈现器上的header()函数,例如在theme\YOUR_THEME\classes\output\core_renderer.php:上
namespace theme_YOUR_THEME\output;
defined('MOODLE_INTERNAL') || die;
use context_system;
class core_renderer extends \theme_boost\output\core_renderer {
public function header() {
global $USER;
$roles = get_user_roles(context_system::instance(),$USER->id);
if (!empty($roles)){
foreach($roles as $role){
$this->page->add_body_class('role-'.$role->shortname);
}
}else{
$this->page->add_body_class('role-none');
}
return parent::header();
}
}这样,每个页面都会调用此函数,并将所需的css类添加到body标记中。
https://stackoverflow.com/questions/64079136
复制相似问题