moodle - 根据用户角色创建 CSS 类
问题描述
使用 Moodle 3.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');
}
最好我希望它在每一页上运行。在主题中,我尝试将其放置在我认为可以尽早执行以修改主体元素的几乎每个位置/功能中。要么我没有得到任何输出,要么警告表明运行add_body_class()为时已晚。
解决方案
覆盖当前主题模板的核心渲染器上的 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 (is_array($roles) && !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 标记中。
推荐阅读
- css - 是否有css来选择特定页面上的文本?
- python-3.x - 有没有办法知道 0 是否在列表或字符串中的其他 2 个整数之间?
- android - 无法解析自动完成或名称解析 Places API PlaceAutocomplete: Status{statusCode=PLACES_API_ACCESS_NOT_CONFIGURED, resolution=null}
- google-chrome - chrome 扩展 chrome.storage.local 默认设置
- dart - 获取包时出现“此处不允许映射值”错误
- sql-server - ALTER/CREATE 在事务中阻塞并使用环回链接服务器
- android - 如何使用外部视频播放器启动视频网址?
- linux - 无法使用eclipse调试c程序linux
- javascript - Display all pupil data from object property of school class
- reactjs - 如何在 React Typescript 中使用带有 @reach/router 的 react-pose?